162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Begun April 1, 1996, Mike Shaver.
662306a36Sopenharmony_ci * Added /proc/sys/net/ipv4 directory entry (empty =) ). [MS]
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/sysctl.h>
1062306a36Sopenharmony_ci#include <linux/seqlock.h>
1162306a36Sopenharmony_ci#include <linux/init.h>
1262306a36Sopenharmony_ci#include <linux/slab.h>
1362306a36Sopenharmony_ci#include <net/icmp.h>
1462306a36Sopenharmony_ci#include <net/ip.h>
1562306a36Sopenharmony_ci#include <net/ip_fib.h>
1662306a36Sopenharmony_ci#include <net/tcp.h>
1762306a36Sopenharmony_ci#include <net/udp.h>
1862306a36Sopenharmony_ci#include <net/cipso_ipv4.h>
1962306a36Sopenharmony_ci#include <net/ping.h>
2062306a36Sopenharmony_ci#include <net/protocol.h>
2162306a36Sopenharmony_ci#include <net/netevent.h>
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistatic int tcp_retr1_max = 255;
2462306a36Sopenharmony_cistatic int ip_local_port_range_min[] = { 1, 1 };
2562306a36Sopenharmony_cistatic int ip_local_port_range_max[] = { 65535, 65535 };
2662306a36Sopenharmony_cistatic int tcp_adv_win_scale_min = -31;
2762306a36Sopenharmony_cistatic int tcp_adv_win_scale_max = 31;
2862306a36Sopenharmony_cistatic int tcp_app_win_max = 31;
2962306a36Sopenharmony_cistatic int tcp_min_snd_mss_min = TCP_MIN_SND_MSS;
3062306a36Sopenharmony_cistatic int tcp_min_snd_mss_max = 65535;
3162306a36Sopenharmony_cistatic int ip_privileged_port_min;
3262306a36Sopenharmony_cistatic int ip_privileged_port_max = 65535;
3362306a36Sopenharmony_cistatic int ip_ttl_min = 1;
3462306a36Sopenharmony_cistatic int ip_ttl_max = 255;
3562306a36Sopenharmony_cistatic int tcp_syn_retries_min = 1;
3662306a36Sopenharmony_cistatic int tcp_syn_retries_max = MAX_TCP_SYNCNT;
3762306a36Sopenharmony_cistatic int tcp_syn_linear_timeouts_max = MAX_TCP_SYNCNT;
3862306a36Sopenharmony_cistatic unsigned long ip_ping_group_range_min[] = { 0, 0 };
3962306a36Sopenharmony_cistatic unsigned long ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX };
4062306a36Sopenharmony_cistatic u32 u32_max_div_HZ = UINT_MAX / HZ;
4162306a36Sopenharmony_cistatic int one_day_secs = 24 * 3600;
4262306a36Sopenharmony_cistatic u32 fib_multipath_hash_fields_all_mask __maybe_unused =
4362306a36Sopenharmony_ci	FIB_MULTIPATH_HASH_FIELD_ALL_MASK;
4462306a36Sopenharmony_cistatic unsigned int tcp_child_ehash_entries_max = 16 * 1024 * 1024;
4562306a36Sopenharmony_cistatic unsigned int udp_child_hash_entries_max = UDP_HTABLE_SIZE_MAX;
4662306a36Sopenharmony_cistatic int tcp_plb_max_rounds = 31;
4762306a36Sopenharmony_cistatic int tcp_plb_max_cong_thresh = 256;
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci/* obsolete */
5062306a36Sopenharmony_cistatic int sysctl_tcp_low_latency __read_mostly;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci/* Update system visible IP port range */
5362306a36Sopenharmony_cistatic void set_local_port_range(struct net *net, int range[2])
5462306a36Sopenharmony_ci{
5562306a36Sopenharmony_ci	bool same_parity = !((range[0] ^ range[1]) & 1);
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	write_seqlock_bh(&net->ipv4.ip_local_ports.lock);
5862306a36Sopenharmony_ci	if (same_parity && !net->ipv4.ip_local_ports.warned) {
5962306a36Sopenharmony_ci		net->ipv4.ip_local_ports.warned = true;
6062306a36Sopenharmony_ci		pr_err_ratelimited("ip_local_port_range: prefer different parity for start/end values.\n");
6162306a36Sopenharmony_ci	}
6262306a36Sopenharmony_ci	net->ipv4.ip_local_ports.range[0] = range[0];
6362306a36Sopenharmony_ci	net->ipv4.ip_local_ports.range[1] = range[1];
6462306a36Sopenharmony_ci	write_sequnlock_bh(&net->ipv4.ip_local_ports.lock);
6562306a36Sopenharmony_ci}
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci/* Validate changes from /proc interface. */
6862306a36Sopenharmony_cistatic int ipv4_local_port_range(struct ctl_table *table, int write,
6962306a36Sopenharmony_ci				 void *buffer, size_t *lenp, loff_t *ppos)
7062306a36Sopenharmony_ci{
7162306a36Sopenharmony_ci	struct net *net =
7262306a36Sopenharmony_ci		container_of(table->data, struct net, ipv4.ip_local_ports.range);
7362306a36Sopenharmony_ci	int ret;
7462306a36Sopenharmony_ci	int range[2];
7562306a36Sopenharmony_ci	struct ctl_table tmp = {
7662306a36Sopenharmony_ci		.data = &range,
7762306a36Sopenharmony_ci		.maxlen = sizeof(range),
7862306a36Sopenharmony_ci		.mode = table->mode,
7962306a36Sopenharmony_ci		.extra1 = &ip_local_port_range_min,
8062306a36Sopenharmony_ci		.extra2 = &ip_local_port_range_max,
8162306a36Sopenharmony_ci	};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci	inet_get_local_port_range(net, &range[0], &range[1]);
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci	if (write && ret == 0) {
8862306a36Sopenharmony_ci		/* Ensure that the upper limit is not smaller than the lower,
8962306a36Sopenharmony_ci		 * and that the lower does not encroach upon the privileged
9062306a36Sopenharmony_ci		 * port limit.
9162306a36Sopenharmony_ci		 */
9262306a36Sopenharmony_ci		if ((range[1] < range[0]) ||
9362306a36Sopenharmony_ci		    (range[0] < READ_ONCE(net->ipv4.sysctl_ip_prot_sock)))
9462306a36Sopenharmony_ci			ret = -EINVAL;
9562306a36Sopenharmony_ci		else
9662306a36Sopenharmony_ci			set_local_port_range(net, range);
9762306a36Sopenharmony_ci	}
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci	return ret;
10062306a36Sopenharmony_ci}
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci/* Validate changes from /proc interface. */
10362306a36Sopenharmony_cistatic int ipv4_privileged_ports(struct ctl_table *table, int write,
10462306a36Sopenharmony_ci				void *buffer, size_t *lenp, loff_t *ppos)
10562306a36Sopenharmony_ci{
10662306a36Sopenharmony_ci	struct net *net = container_of(table->data, struct net,
10762306a36Sopenharmony_ci	    ipv4.sysctl_ip_prot_sock);
10862306a36Sopenharmony_ci	int ret;
10962306a36Sopenharmony_ci	int pports;
11062306a36Sopenharmony_ci	int range[2];
11162306a36Sopenharmony_ci	struct ctl_table tmp = {
11262306a36Sopenharmony_ci		.data = &pports,
11362306a36Sopenharmony_ci		.maxlen = sizeof(pports),
11462306a36Sopenharmony_ci		.mode = table->mode,
11562306a36Sopenharmony_ci		.extra1 = &ip_privileged_port_min,
11662306a36Sopenharmony_ci		.extra2 = &ip_privileged_port_max,
11762306a36Sopenharmony_ci	};
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci	pports = READ_ONCE(net->ipv4.sysctl_ip_prot_sock);
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci	ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci	if (write && ret == 0) {
12462306a36Sopenharmony_ci		inet_get_local_port_range(net, &range[0], &range[1]);
12562306a36Sopenharmony_ci		/* Ensure that the local port range doesn't overlap with the
12662306a36Sopenharmony_ci		 * privileged port range.
12762306a36Sopenharmony_ci		 */
12862306a36Sopenharmony_ci		if (range[0] < pports)
12962306a36Sopenharmony_ci			ret = -EINVAL;
13062306a36Sopenharmony_ci		else
13162306a36Sopenharmony_ci			WRITE_ONCE(net->ipv4.sysctl_ip_prot_sock, pports);
13262306a36Sopenharmony_ci	}
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci	return ret;
13562306a36Sopenharmony_ci}
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_cistatic void inet_get_ping_group_range_table(struct ctl_table *table, kgid_t *low, kgid_t *high)
13862306a36Sopenharmony_ci{
13962306a36Sopenharmony_ci	kgid_t *data = table->data;
14062306a36Sopenharmony_ci	struct net *net =
14162306a36Sopenharmony_ci		container_of(table->data, struct net, ipv4.ping_group_range.range);
14262306a36Sopenharmony_ci	unsigned int seq;
14362306a36Sopenharmony_ci	do {
14462306a36Sopenharmony_ci		seq = read_seqbegin(&net->ipv4.ping_group_range.lock);
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci		*low = data[0];
14762306a36Sopenharmony_ci		*high = data[1];
14862306a36Sopenharmony_ci	} while (read_seqretry(&net->ipv4.ping_group_range.lock, seq));
14962306a36Sopenharmony_ci}
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci/* Update system visible IP port range */
15262306a36Sopenharmony_cistatic void set_ping_group_range(struct ctl_table *table, kgid_t low, kgid_t high)
15362306a36Sopenharmony_ci{
15462306a36Sopenharmony_ci	kgid_t *data = table->data;
15562306a36Sopenharmony_ci	struct net *net =
15662306a36Sopenharmony_ci		container_of(table->data, struct net, ipv4.ping_group_range.range);
15762306a36Sopenharmony_ci	write_seqlock(&net->ipv4.ping_group_range.lock);
15862306a36Sopenharmony_ci	data[0] = low;
15962306a36Sopenharmony_ci	data[1] = high;
16062306a36Sopenharmony_ci	write_sequnlock(&net->ipv4.ping_group_range.lock);
16162306a36Sopenharmony_ci}
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci/* Validate changes from /proc interface. */
16462306a36Sopenharmony_cistatic int ipv4_ping_group_range(struct ctl_table *table, int write,
16562306a36Sopenharmony_ci				 void *buffer, size_t *lenp, loff_t *ppos)
16662306a36Sopenharmony_ci{
16762306a36Sopenharmony_ci	struct user_namespace *user_ns = current_user_ns();
16862306a36Sopenharmony_ci	int ret;
16962306a36Sopenharmony_ci	unsigned long urange[2];
17062306a36Sopenharmony_ci	kgid_t low, high;
17162306a36Sopenharmony_ci	struct ctl_table tmp = {
17262306a36Sopenharmony_ci		.data = &urange,
17362306a36Sopenharmony_ci		.maxlen = sizeof(urange),
17462306a36Sopenharmony_ci		.mode = table->mode,
17562306a36Sopenharmony_ci		.extra1 = &ip_ping_group_range_min,
17662306a36Sopenharmony_ci		.extra2 = &ip_ping_group_range_max,
17762306a36Sopenharmony_ci	};
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci	inet_get_ping_group_range_table(table, &low, &high);
18062306a36Sopenharmony_ci	urange[0] = from_kgid_munged(user_ns, low);
18162306a36Sopenharmony_ci	urange[1] = from_kgid_munged(user_ns, high);
18262306a36Sopenharmony_ci	ret = proc_doulongvec_minmax(&tmp, write, buffer, lenp, ppos);
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci	if (write && ret == 0) {
18562306a36Sopenharmony_ci		low = make_kgid(user_ns, urange[0]);
18662306a36Sopenharmony_ci		high = make_kgid(user_ns, urange[1]);
18762306a36Sopenharmony_ci		if (!gid_valid(low) || !gid_valid(high))
18862306a36Sopenharmony_ci			return -EINVAL;
18962306a36Sopenharmony_ci		if (urange[1] < urange[0] || gid_lt(high, low)) {
19062306a36Sopenharmony_ci			low = make_kgid(&init_user_ns, 1);
19162306a36Sopenharmony_ci			high = make_kgid(&init_user_ns, 0);
19262306a36Sopenharmony_ci		}
19362306a36Sopenharmony_ci		set_ping_group_range(table, low, high);
19462306a36Sopenharmony_ci	}
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci	return ret;
19762306a36Sopenharmony_ci}
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_cistatic int ipv4_fwd_update_priority(struct ctl_table *table, int write,
20062306a36Sopenharmony_ci				    void *buffer, size_t *lenp, loff_t *ppos)
20162306a36Sopenharmony_ci{
20262306a36Sopenharmony_ci	struct net *net;
20362306a36Sopenharmony_ci	int ret;
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci	net = container_of(table->data, struct net,
20662306a36Sopenharmony_ci			   ipv4.sysctl_ip_fwd_update_priority);
20762306a36Sopenharmony_ci	ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
20862306a36Sopenharmony_ci	if (write && ret == 0)
20962306a36Sopenharmony_ci		call_netevent_notifiers(NETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE,
21062306a36Sopenharmony_ci					net);
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci	return ret;
21362306a36Sopenharmony_ci}
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_cistatic int proc_tcp_congestion_control(struct ctl_table *ctl, int write,
21662306a36Sopenharmony_ci				       void *buffer, size_t *lenp, loff_t *ppos)
21762306a36Sopenharmony_ci{
21862306a36Sopenharmony_ci	struct net *net = container_of(ctl->data, struct net,
21962306a36Sopenharmony_ci				       ipv4.tcp_congestion_control);
22062306a36Sopenharmony_ci	char val[TCP_CA_NAME_MAX];
22162306a36Sopenharmony_ci	struct ctl_table tbl = {
22262306a36Sopenharmony_ci		.data = val,
22362306a36Sopenharmony_ci		.maxlen = TCP_CA_NAME_MAX,
22462306a36Sopenharmony_ci	};
22562306a36Sopenharmony_ci	int ret;
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci	tcp_get_default_congestion_control(net, val);
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ci	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
23062306a36Sopenharmony_ci	if (write && ret == 0)
23162306a36Sopenharmony_ci		ret = tcp_set_default_congestion_control(net, val);
23262306a36Sopenharmony_ci	return ret;
23362306a36Sopenharmony_ci}
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_cistatic int proc_tcp_available_congestion_control(struct ctl_table *ctl,
23662306a36Sopenharmony_ci						 int write, void *buffer,
23762306a36Sopenharmony_ci						 size_t *lenp, loff_t *ppos)
23862306a36Sopenharmony_ci{
23962306a36Sopenharmony_ci	struct ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX, };
24062306a36Sopenharmony_ci	int ret;
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ci	tbl.data = kmalloc(tbl.maxlen, GFP_USER);
24362306a36Sopenharmony_ci	if (!tbl.data)
24462306a36Sopenharmony_ci		return -ENOMEM;
24562306a36Sopenharmony_ci	tcp_get_available_congestion_control(tbl.data, TCP_CA_BUF_MAX);
24662306a36Sopenharmony_ci	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
24762306a36Sopenharmony_ci	kfree(tbl.data);
24862306a36Sopenharmony_ci	return ret;
24962306a36Sopenharmony_ci}
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_cistatic int proc_allowed_congestion_control(struct ctl_table *ctl,
25262306a36Sopenharmony_ci					   int write, void *buffer,
25362306a36Sopenharmony_ci					   size_t *lenp, loff_t *ppos)
25462306a36Sopenharmony_ci{
25562306a36Sopenharmony_ci	struct ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX };
25662306a36Sopenharmony_ci	int ret;
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci	tbl.data = kmalloc(tbl.maxlen, GFP_USER);
25962306a36Sopenharmony_ci	if (!tbl.data)
26062306a36Sopenharmony_ci		return -ENOMEM;
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ci	tcp_get_allowed_congestion_control(tbl.data, tbl.maxlen);
26362306a36Sopenharmony_ci	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
26462306a36Sopenharmony_ci	if (write && ret == 0)
26562306a36Sopenharmony_ci		ret = tcp_set_allowed_congestion_control(tbl.data);
26662306a36Sopenharmony_ci	kfree(tbl.data);
26762306a36Sopenharmony_ci	return ret;
26862306a36Sopenharmony_ci}
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_cistatic int sscanf_key(char *buf, __le32 *key)
27162306a36Sopenharmony_ci{
27262306a36Sopenharmony_ci	u32 user_key[4];
27362306a36Sopenharmony_ci	int i, ret = 0;
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci	if (sscanf(buf, "%x-%x-%x-%x", user_key, user_key + 1,
27662306a36Sopenharmony_ci		   user_key + 2, user_key + 3) != 4) {
27762306a36Sopenharmony_ci		ret = -EINVAL;
27862306a36Sopenharmony_ci	} else {
27962306a36Sopenharmony_ci		for (i = 0; i < ARRAY_SIZE(user_key); i++)
28062306a36Sopenharmony_ci			key[i] = cpu_to_le32(user_key[i]);
28162306a36Sopenharmony_ci	}
28262306a36Sopenharmony_ci	pr_debug("proc TFO key set 0x%x-%x-%x-%x <- 0x%s: %u\n",
28362306a36Sopenharmony_ci		 user_key[0], user_key[1], user_key[2], user_key[3], buf, ret);
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci	return ret;
28662306a36Sopenharmony_ci}
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_cistatic int proc_tcp_fastopen_key(struct ctl_table *table, int write,
28962306a36Sopenharmony_ci				 void *buffer, size_t *lenp, loff_t *ppos)
29062306a36Sopenharmony_ci{
29162306a36Sopenharmony_ci	struct net *net = container_of(table->data, struct net,
29262306a36Sopenharmony_ci	    ipv4.sysctl_tcp_fastopen);
29362306a36Sopenharmony_ci	/* maxlen to print the list of keys in hex (*2), with dashes
29462306a36Sopenharmony_ci	 * separating doublewords and a comma in between keys.
29562306a36Sopenharmony_ci	 */
29662306a36Sopenharmony_ci	struct ctl_table tbl = { .maxlen = ((TCP_FASTOPEN_KEY_LENGTH *
29762306a36Sopenharmony_ci					    2 * TCP_FASTOPEN_KEY_MAX) +
29862306a36Sopenharmony_ci					    (TCP_FASTOPEN_KEY_MAX * 5)) };
29962306a36Sopenharmony_ci	u32 user_key[TCP_FASTOPEN_KEY_BUF_LENGTH / sizeof(u32)];
30062306a36Sopenharmony_ci	__le32 key[TCP_FASTOPEN_KEY_BUF_LENGTH / sizeof(__le32)];
30162306a36Sopenharmony_ci	char *backup_data;
30262306a36Sopenharmony_ci	int ret, i = 0, off = 0, n_keys;
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci	tbl.data = kmalloc(tbl.maxlen, GFP_KERNEL);
30562306a36Sopenharmony_ci	if (!tbl.data)
30662306a36Sopenharmony_ci		return -ENOMEM;
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ci	n_keys = tcp_fastopen_get_cipher(net, NULL, (u64 *)key);
30962306a36Sopenharmony_ci	if (!n_keys) {
31062306a36Sopenharmony_ci		memset(&key[0], 0, TCP_FASTOPEN_KEY_LENGTH);
31162306a36Sopenharmony_ci		n_keys = 1;
31262306a36Sopenharmony_ci	}
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci	for (i = 0; i < n_keys * 4; i++)
31562306a36Sopenharmony_ci		user_key[i] = le32_to_cpu(key[i]);
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_ci	for (i = 0; i < n_keys; i++) {
31862306a36Sopenharmony_ci		off += snprintf(tbl.data + off, tbl.maxlen - off,
31962306a36Sopenharmony_ci				"%08x-%08x-%08x-%08x",
32062306a36Sopenharmony_ci				user_key[i * 4],
32162306a36Sopenharmony_ci				user_key[i * 4 + 1],
32262306a36Sopenharmony_ci				user_key[i * 4 + 2],
32362306a36Sopenharmony_ci				user_key[i * 4 + 3]);
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_ci		if (WARN_ON_ONCE(off >= tbl.maxlen - 1))
32662306a36Sopenharmony_ci			break;
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci		if (i + 1 < n_keys)
32962306a36Sopenharmony_ci			off += snprintf(tbl.data + off, tbl.maxlen - off, ",");
33062306a36Sopenharmony_ci	}
33162306a36Sopenharmony_ci
33262306a36Sopenharmony_ci	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci	if (write && ret == 0) {
33562306a36Sopenharmony_ci		backup_data = strchr(tbl.data, ',');
33662306a36Sopenharmony_ci		if (backup_data) {
33762306a36Sopenharmony_ci			*backup_data = '\0';
33862306a36Sopenharmony_ci			backup_data++;
33962306a36Sopenharmony_ci		}
34062306a36Sopenharmony_ci		if (sscanf_key(tbl.data, key)) {
34162306a36Sopenharmony_ci			ret = -EINVAL;
34262306a36Sopenharmony_ci			goto bad_key;
34362306a36Sopenharmony_ci		}
34462306a36Sopenharmony_ci		if (backup_data) {
34562306a36Sopenharmony_ci			if (sscanf_key(backup_data, key + 4)) {
34662306a36Sopenharmony_ci				ret = -EINVAL;
34762306a36Sopenharmony_ci				goto bad_key;
34862306a36Sopenharmony_ci			}
34962306a36Sopenharmony_ci		}
35062306a36Sopenharmony_ci		tcp_fastopen_reset_cipher(net, NULL, key,
35162306a36Sopenharmony_ci					  backup_data ? key + 4 : NULL);
35262306a36Sopenharmony_ci	}
35362306a36Sopenharmony_ci
35462306a36Sopenharmony_cibad_key:
35562306a36Sopenharmony_ci	kfree(tbl.data);
35662306a36Sopenharmony_ci	return ret;
35762306a36Sopenharmony_ci}
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_cistatic int proc_tfo_blackhole_detect_timeout(struct ctl_table *table,
36062306a36Sopenharmony_ci					     int write, void *buffer,
36162306a36Sopenharmony_ci					     size_t *lenp, loff_t *ppos)
36262306a36Sopenharmony_ci{
36362306a36Sopenharmony_ci	struct net *net = container_of(table->data, struct net,
36462306a36Sopenharmony_ci	    ipv4.sysctl_tcp_fastopen_blackhole_timeout);
36562306a36Sopenharmony_ci	int ret;
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ci	ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
36862306a36Sopenharmony_ci	if (write && ret == 0)
36962306a36Sopenharmony_ci		atomic_set(&net->ipv4.tfo_active_disable_times, 0);
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci	return ret;
37262306a36Sopenharmony_ci}
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_cistatic int proc_tcp_available_ulp(struct ctl_table *ctl,
37562306a36Sopenharmony_ci				  int write, void *buffer, size_t *lenp,
37662306a36Sopenharmony_ci				  loff_t *ppos)
37762306a36Sopenharmony_ci{
37862306a36Sopenharmony_ci	struct ctl_table tbl = { .maxlen = TCP_ULP_BUF_MAX, };
37962306a36Sopenharmony_ci	int ret;
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ci	tbl.data = kmalloc(tbl.maxlen, GFP_USER);
38262306a36Sopenharmony_ci	if (!tbl.data)
38362306a36Sopenharmony_ci		return -ENOMEM;
38462306a36Sopenharmony_ci	tcp_get_available_ulp(tbl.data, TCP_ULP_BUF_MAX);
38562306a36Sopenharmony_ci	ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
38662306a36Sopenharmony_ci	kfree(tbl.data);
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci	return ret;
38962306a36Sopenharmony_ci}
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_cistatic int proc_tcp_ehash_entries(struct ctl_table *table, int write,
39262306a36Sopenharmony_ci				  void *buffer, size_t *lenp, loff_t *ppos)
39362306a36Sopenharmony_ci{
39462306a36Sopenharmony_ci	struct net *net = container_of(table->data, struct net,
39562306a36Sopenharmony_ci				       ipv4.sysctl_tcp_child_ehash_entries);
39662306a36Sopenharmony_ci	struct inet_hashinfo *hinfo = net->ipv4.tcp_death_row.hashinfo;
39762306a36Sopenharmony_ci	int tcp_ehash_entries;
39862306a36Sopenharmony_ci	struct ctl_table tbl;
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ci	tcp_ehash_entries = hinfo->ehash_mask + 1;
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ci	/* A negative number indicates that the child netns
40362306a36Sopenharmony_ci	 * shares the global ehash.
40462306a36Sopenharmony_ci	 */
40562306a36Sopenharmony_ci	if (!net_eq(net, &init_net) && !hinfo->pernet)
40662306a36Sopenharmony_ci		tcp_ehash_entries *= -1;
40762306a36Sopenharmony_ci
40862306a36Sopenharmony_ci	memset(&tbl, 0, sizeof(tbl));
40962306a36Sopenharmony_ci	tbl.data = &tcp_ehash_entries;
41062306a36Sopenharmony_ci	tbl.maxlen = sizeof(int);
41162306a36Sopenharmony_ci
41262306a36Sopenharmony_ci	return proc_dointvec(&tbl, write, buffer, lenp, ppos);
41362306a36Sopenharmony_ci}
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_cistatic int proc_udp_hash_entries(struct ctl_table *table, int write,
41662306a36Sopenharmony_ci				 void *buffer, size_t *lenp, loff_t *ppos)
41762306a36Sopenharmony_ci{
41862306a36Sopenharmony_ci	struct net *net = container_of(table->data, struct net,
41962306a36Sopenharmony_ci				       ipv4.sysctl_udp_child_hash_entries);
42062306a36Sopenharmony_ci	int udp_hash_entries;
42162306a36Sopenharmony_ci	struct ctl_table tbl;
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci	udp_hash_entries = net->ipv4.udp_table->mask + 1;
42462306a36Sopenharmony_ci
42562306a36Sopenharmony_ci	/* A negative number indicates that the child netns
42662306a36Sopenharmony_ci	 * shares the global udp_table.
42762306a36Sopenharmony_ci	 */
42862306a36Sopenharmony_ci	if (!net_eq(net, &init_net) && net->ipv4.udp_table == &udp_table)
42962306a36Sopenharmony_ci		udp_hash_entries *= -1;
43062306a36Sopenharmony_ci
43162306a36Sopenharmony_ci	memset(&tbl, 0, sizeof(tbl));
43262306a36Sopenharmony_ci	tbl.data = &udp_hash_entries;
43362306a36Sopenharmony_ci	tbl.maxlen = sizeof(int);
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ci	return proc_dointvec(&tbl, write, buffer, lenp, ppos);
43662306a36Sopenharmony_ci}
43762306a36Sopenharmony_ci
43862306a36Sopenharmony_ci#ifdef CONFIG_IP_ROUTE_MULTIPATH
43962306a36Sopenharmony_cistatic int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
44062306a36Sopenharmony_ci					  void *buffer, size_t *lenp,
44162306a36Sopenharmony_ci					  loff_t *ppos)
44262306a36Sopenharmony_ci{
44362306a36Sopenharmony_ci	struct net *net = container_of(table->data, struct net,
44462306a36Sopenharmony_ci	    ipv4.sysctl_fib_multipath_hash_policy);
44562306a36Sopenharmony_ci	int ret;
44662306a36Sopenharmony_ci
44762306a36Sopenharmony_ci	ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
44862306a36Sopenharmony_ci	if (write && ret == 0)
44962306a36Sopenharmony_ci		call_netevent_notifiers(NETEVENT_IPV4_MPATH_HASH_UPDATE, net);
45062306a36Sopenharmony_ci
45162306a36Sopenharmony_ci	return ret;
45262306a36Sopenharmony_ci}
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_cistatic int proc_fib_multipath_hash_fields(struct ctl_table *table, int write,
45562306a36Sopenharmony_ci					  void *buffer, size_t *lenp,
45662306a36Sopenharmony_ci					  loff_t *ppos)
45762306a36Sopenharmony_ci{
45862306a36Sopenharmony_ci	struct net *net;
45962306a36Sopenharmony_ci	int ret;
46062306a36Sopenharmony_ci
46162306a36Sopenharmony_ci	net = container_of(table->data, struct net,
46262306a36Sopenharmony_ci			   ipv4.sysctl_fib_multipath_hash_fields);
46362306a36Sopenharmony_ci	ret = proc_douintvec_minmax(table, write, buffer, lenp, ppos);
46462306a36Sopenharmony_ci	if (write && ret == 0)
46562306a36Sopenharmony_ci		call_netevent_notifiers(NETEVENT_IPV4_MPATH_HASH_UPDATE, net);
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_ci	return ret;
46862306a36Sopenharmony_ci}
46962306a36Sopenharmony_ci#endif
47062306a36Sopenharmony_ci
47162306a36Sopenharmony_cistatic struct ctl_table ipv4_table[] = {
47262306a36Sopenharmony_ci	{
47362306a36Sopenharmony_ci		.procname	= "tcp_max_orphans",
47462306a36Sopenharmony_ci		.data		= &sysctl_tcp_max_orphans,
47562306a36Sopenharmony_ci		.maxlen		= sizeof(int),
47662306a36Sopenharmony_ci		.mode		= 0644,
47762306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
47862306a36Sopenharmony_ci	},
47962306a36Sopenharmony_ci	{
48062306a36Sopenharmony_ci		.procname	= "inet_peer_threshold",
48162306a36Sopenharmony_ci		.data		= &inet_peer_threshold,
48262306a36Sopenharmony_ci		.maxlen		= sizeof(int),
48362306a36Sopenharmony_ci		.mode		= 0644,
48462306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
48562306a36Sopenharmony_ci	},
48662306a36Sopenharmony_ci	{
48762306a36Sopenharmony_ci		.procname	= "inet_peer_minttl",
48862306a36Sopenharmony_ci		.data		= &inet_peer_minttl,
48962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
49062306a36Sopenharmony_ci		.mode		= 0644,
49162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_jiffies,
49262306a36Sopenharmony_ci	},
49362306a36Sopenharmony_ci	{
49462306a36Sopenharmony_ci		.procname	= "inet_peer_maxttl",
49562306a36Sopenharmony_ci		.data		= &inet_peer_maxttl,
49662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
49762306a36Sopenharmony_ci		.mode		= 0644,
49862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_jiffies,
49962306a36Sopenharmony_ci	},
50062306a36Sopenharmony_ci	{
50162306a36Sopenharmony_ci		.procname	= "tcp_mem",
50262306a36Sopenharmony_ci		.maxlen		= sizeof(sysctl_tcp_mem),
50362306a36Sopenharmony_ci		.data		= &sysctl_tcp_mem,
50462306a36Sopenharmony_ci		.mode		= 0644,
50562306a36Sopenharmony_ci		.proc_handler	= proc_doulongvec_minmax,
50662306a36Sopenharmony_ci	},
50762306a36Sopenharmony_ci	{
50862306a36Sopenharmony_ci		.procname	= "tcp_low_latency",
50962306a36Sopenharmony_ci		.data		= &sysctl_tcp_low_latency,
51062306a36Sopenharmony_ci		.maxlen		= sizeof(int),
51162306a36Sopenharmony_ci		.mode		= 0644,
51262306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
51362306a36Sopenharmony_ci	},
51462306a36Sopenharmony_ci#ifdef CONFIG_NETLABEL
51562306a36Sopenharmony_ci	{
51662306a36Sopenharmony_ci		.procname	= "cipso_cache_enable",
51762306a36Sopenharmony_ci		.data		= &cipso_v4_cache_enabled,
51862306a36Sopenharmony_ci		.maxlen		= sizeof(int),
51962306a36Sopenharmony_ci		.mode		= 0644,
52062306a36Sopenharmony_ci		.proc_handler	= proc_dointvec,
52162306a36Sopenharmony_ci	},
52262306a36Sopenharmony_ci	{
52362306a36Sopenharmony_ci		.procname	= "cipso_cache_bucket_size",
52462306a36Sopenharmony_ci		.data		= &cipso_v4_cache_bucketsize,
52562306a36Sopenharmony_ci		.maxlen		= sizeof(int),
52662306a36Sopenharmony_ci		.mode		= 0644,
52762306a36Sopenharmony_ci		.proc_handler	= proc_dointvec,
52862306a36Sopenharmony_ci	},
52962306a36Sopenharmony_ci	{
53062306a36Sopenharmony_ci		.procname	= "cipso_rbm_optfmt",
53162306a36Sopenharmony_ci		.data		= &cipso_v4_rbm_optfmt,
53262306a36Sopenharmony_ci		.maxlen		= sizeof(int),
53362306a36Sopenharmony_ci		.mode		= 0644,
53462306a36Sopenharmony_ci		.proc_handler	= proc_dointvec,
53562306a36Sopenharmony_ci	},
53662306a36Sopenharmony_ci	{
53762306a36Sopenharmony_ci		.procname	= "cipso_rbm_strictvalid",
53862306a36Sopenharmony_ci		.data		= &cipso_v4_rbm_strictvalid,
53962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
54062306a36Sopenharmony_ci		.mode		= 0644,
54162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec,
54262306a36Sopenharmony_ci	},
54362306a36Sopenharmony_ci#endif /* CONFIG_NETLABEL */
54462306a36Sopenharmony_ci	{
54562306a36Sopenharmony_ci		.procname	= "tcp_available_ulp",
54662306a36Sopenharmony_ci		.maxlen		= TCP_ULP_BUF_MAX,
54762306a36Sopenharmony_ci		.mode		= 0444,
54862306a36Sopenharmony_ci		.proc_handler   = proc_tcp_available_ulp,
54962306a36Sopenharmony_ci	},
55062306a36Sopenharmony_ci	{
55162306a36Sopenharmony_ci		.procname	= "icmp_msgs_per_sec",
55262306a36Sopenharmony_ci		.data		= &sysctl_icmp_msgs_per_sec,
55362306a36Sopenharmony_ci		.maxlen		= sizeof(int),
55462306a36Sopenharmony_ci		.mode		= 0644,
55562306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
55662306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
55762306a36Sopenharmony_ci	},
55862306a36Sopenharmony_ci	{
55962306a36Sopenharmony_ci		.procname	= "icmp_msgs_burst",
56062306a36Sopenharmony_ci		.data		= &sysctl_icmp_msgs_burst,
56162306a36Sopenharmony_ci		.maxlen		= sizeof(int),
56262306a36Sopenharmony_ci		.mode		= 0644,
56362306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
56462306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
56562306a36Sopenharmony_ci	},
56662306a36Sopenharmony_ci	{
56762306a36Sopenharmony_ci		.procname	= "udp_mem",
56862306a36Sopenharmony_ci		.data		= &sysctl_udp_mem,
56962306a36Sopenharmony_ci		.maxlen		= sizeof(sysctl_udp_mem),
57062306a36Sopenharmony_ci		.mode		= 0644,
57162306a36Sopenharmony_ci		.proc_handler	= proc_doulongvec_minmax,
57262306a36Sopenharmony_ci	},
57362306a36Sopenharmony_ci	{
57462306a36Sopenharmony_ci		.procname	= "fib_sync_mem",
57562306a36Sopenharmony_ci		.data		= &sysctl_fib_sync_mem,
57662306a36Sopenharmony_ci		.maxlen		= sizeof(sysctl_fib_sync_mem),
57762306a36Sopenharmony_ci		.mode		= 0644,
57862306a36Sopenharmony_ci		.proc_handler	= proc_douintvec_minmax,
57962306a36Sopenharmony_ci		.extra1		= &sysctl_fib_sync_mem_min,
58062306a36Sopenharmony_ci		.extra2		= &sysctl_fib_sync_mem_max,
58162306a36Sopenharmony_ci	},
58262306a36Sopenharmony_ci	{ }
58362306a36Sopenharmony_ci};
58462306a36Sopenharmony_ci
58562306a36Sopenharmony_cistatic struct ctl_table ipv4_net_table[] = {
58662306a36Sopenharmony_ci	{
58762306a36Sopenharmony_ci		.procname	= "tcp_max_tw_buckets",
58862306a36Sopenharmony_ci		.data		= &init_net.ipv4.tcp_death_row.sysctl_max_tw_buckets,
58962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
59062306a36Sopenharmony_ci		.mode		= 0644,
59162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
59262306a36Sopenharmony_ci	},
59362306a36Sopenharmony_ci	{
59462306a36Sopenharmony_ci		.procname	= "icmp_echo_ignore_all",
59562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_icmp_echo_ignore_all,
59662306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
59762306a36Sopenharmony_ci		.mode		= 0644,
59862306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
59962306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
60062306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE
60162306a36Sopenharmony_ci	},
60262306a36Sopenharmony_ci	{
60362306a36Sopenharmony_ci		.procname	= "icmp_echo_enable_probe",
60462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_icmp_echo_enable_probe,
60562306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
60662306a36Sopenharmony_ci		.mode		= 0644,
60762306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
60862306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
60962306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE
61062306a36Sopenharmony_ci	},
61162306a36Sopenharmony_ci	{
61262306a36Sopenharmony_ci		.procname	= "icmp_echo_ignore_broadcasts",
61362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_icmp_echo_ignore_broadcasts,
61462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
61562306a36Sopenharmony_ci		.mode		= 0644,
61662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
61762306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
61862306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE
61962306a36Sopenharmony_ci	},
62062306a36Sopenharmony_ci	{
62162306a36Sopenharmony_ci		.procname	= "icmp_ignore_bogus_error_responses",
62262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_icmp_ignore_bogus_error_responses,
62362306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
62462306a36Sopenharmony_ci		.mode		= 0644,
62562306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
62662306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
62762306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE
62862306a36Sopenharmony_ci	},
62962306a36Sopenharmony_ci	{
63062306a36Sopenharmony_ci		.procname	= "icmp_errors_use_inbound_ifaddr",
63162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_icmp_errors_use_inbound_ifaddr,
63262306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
63362306a36Sopenharmony_ci		.mode		= 0644,
63462306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
63562306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
63662306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE
63762306a36Sopenharmony_ci	},
63862306a36Sopenharmony_ci	{
63962306a36Sopenharmony_ci		.procname	= "icmp_ratelimit",
64062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_icmp_ratelimit,
64162306a36Sopenharmony_ci		.maxlen		= sizeof(int),
64262306a36Sopenharmony_ci		.mode		= 0644,
64362306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_ms_jiffies,
64462306a36Sopenharmony_ci	},
64562306a36Sopenharmony_ci	{
64662306a36Sopenharmony_ci		.procname	= "icmp_ratemask",
64762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_icmp_ratemask,
64862306a36Sopenharmony_ci		.maxlen		= sizeof(int),
64962306a36Sopenharmony_ci		.mode		= 0644,
65062306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
65162306a36Sopenharmony_ci	},
65262306a36Sopenharmony_ci	{
65362306a36Sopenharmony_ci		.procname	= "ping_group_range",
65462306a36Sopenharmony_ci		.data		= &init_net.ipv4.ping_group_range.range,
65562306a36Sopenharmony_ci		.maxlen		= sizeof(gid_t)*2,
65662306a36Sopenharmony_ci		.mode		= 0644,
65762306a36Sopenharmony_ci		.proc_handler	= ipv4_ping_group_range,
65862306a36Sopenharmony_ci	},
65962306a36Sopenharmony_ci#ifdef CONFIG_NET_L3_MASTER_DEV
66062306a36Sopenharmony_ci	{
66162306a36Sopenharmony_ci		.procname	= "raw_l3mdev_accept",
66262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_raw_l3mdev_accept,
66362306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
66462306a36Sopenharmony_ci		.mode		= 0644,
66562306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
66662306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
66762306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
66862306a36Sopenharmony_ci	},
66962306a36Sopenharmony_ci#endif
67062306a36Sopenharmony_ci	{
67162306a36Sopenharmony_ci		.procname	= "tcp_ecn",
67262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_ecn,
67362306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
67462306a36Sopenharmony_ci		.mode		= 0644,
67562306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
67662306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
67762306a36Sopenharmony_ci		.extra2		= SYSCTL_TWO,
67862306a36Sopenharmony_ci	},
67962306a36Sopenharmony_ci	{
68062306a36Sopenharmony_ci		.procname	= "tcp_ecn_fallback",
68162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_ecn_fallback,
68262306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
68362306a36Sopenharmony_ci		.mode		= 0644,
68462306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
68562306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
68662306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
68762306a36Sopenharmony_ci	},
68862306a36Sopenharmony_ci	{
68962306a36Sopenharmony_ci		.procname	= "ip_dynaddr",
69062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_dynaddr,
69162306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
69262306a36Sopenharmony_ci		.mode		= 0644,
69362306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
69462306a36Sopenharmony_ci	},
69562306a36Sopenharmony_ci	{
69662306a36Sopenharmony_ci		.procname	= "ip_early_demux",
69762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_early_demux,
69862306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
69962306a36Sopenharmony_ci		.mode		= 0644,
70062306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
70162306a36Sopenharmony_ci	},
70262306a36Sopenharmony_ci	{
70362306a36Sopenharmony_ci		.procname       = "udp_early_demux",
70462306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_udp_early_demux,
70562306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
70662306a36Sopenharmony_ci		.mode           = 0644,
70762306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
70862306a36Sopenharmony_ci	},
70962306a36Sopenharmony_ci	{
71062306a36Sopenharmony_ci		.procname       = "tcp_early_demux",
71162306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_early_demux,
71262306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
71362306a36Sopenharmony_ci		.mode           = 0644,
71462306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
71562306a36Sopenharmony_ci	},
71662306a36Sopenharmony_ci	{
71762306a36Sopenharmony_ci		.procname       = "nexthop_compat_mode",
71862306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_nexthop_compat_mode,
71962306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
72062306a36Sopenharmony_ci		.mode           = 0644,
72162306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
72262306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
72362306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
72462306a36Sopenharmony_ci	},
72562306a36Sopenharmony_ci	{
72662306a36Sopenharmony_ci		.procname	= "ip_default_ttl",
72762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_default_ttl,
72862306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
72962306a36Sopenharmony_ci		.mode		= 0644,
73062306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
73162306a36Sopenharmony_ci		.extra1		= &ip_ttl_min,
73262306a36Sopenharmony_ci		.extra2		= &ip_ttl_max,
73362306a36Sopenharmony_ci	},
73462306a36Sopenharmony_ci	{
73562306a36Sopenharmony_ci		.procname	= "ip_local_port_range",
73662306a36Sopenharmony_ci		.maxlen		= sizeof(init_net.ipv4.ip_local_ports.range),
73762306a36Sopenharmony_ci		.data		= &init_net.ipv4.ip_local_ports.range,
73862306a36Sopenharmony_ci		.mode		= 0644,
73962306a36Sopenharmony_ci		.proc_handler	= ipv4_local_port_range,
74062306a36Sopenharmony_ci	},
74162306a36Sopenharmony_ci	{
74262306a36Sopenharmony_ci		.procname	= "ip_local_reserved_ports",
74362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_local_reserved_ports,
74462306a36Sopenharmony_ci		.maxlen		= 65536,
74562306a36Sopenharmony_ci		.mode		= 0644,
74662306a36Sopenharmony_ci		.proc_handler	= proc_do_large_bitmap,
74762306a36Sopenharmony_ci	},
74862306a36Sopenharmony_ci	{
74962306a36Sopenharmony_ci		.procname	= "ip_no_pmtu_disc",
75062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_no_pmtu_disc,
75162306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
75262306a36Sopenharmony_ci		.mode		= 0644,
75362306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
75462306a36Sopenharmony_ci	},
75562306a36Sopenharmony_ci	{
75662306a36Sopenharmony_ci		.procname	= "ip_forward_use_pmtu",
75762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_fwd_use_pmtu,
75862306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
75962306a36Sopenharmony_ci		.mode		= 0644,
76062306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
76162306a36Sopenharmony_ci	},
76262306a36Sopenharmony_ci	{
76362306a36Sopenharmony_ci		.procname	= "ip_forward_update_priority",
76462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_fwd_update_priority,
76562306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
76662306a36Sopenharmony_ci		.mode		= 0644,
76762306a36Sopenharmony_ci		.proc_handler   = ipv4_fwd_update_priority,
76862306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
76962306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
77062306a36Sopenharmony_ci	},
77162306a36Sopenharmony_ci	{
77262306a36Sopenharmony_ci		.procname	= "ip_nonlocal_bind",
77362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_nonlocal_bind,
77462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
77562306a36Sopenharmony_ci		.mode		= 0644,
77662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
77762306a36Sopenharmony_ci	},
77862306a36Sopenharmony_ci	{
77962306a36Sopenharmony_ci		.procname	= "ip_autobind_reuse",
78062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_autobind_reuse,
78162306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
78262306a36Sopenharmony_ci		.mode		= 0644,
78362306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
78462306a36Sopenharmony_ci		.extra1         = SYSCTL_ZERO,
78562306a36Sopenharmony_ci		.extra2         = SYSCTL_ONE,
78662306a36Sopenharmony_ci	},
78762306a36Sopenharmony_ci	{
78862306a36Sopenharmony_ci		.procname	= "fwmark_reflect",
78962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_fwmark_reflect,
79062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
79162306a36Sopenharmony_ci		.mode		= 0644,
79262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
79362306a36Sopenharmony_ci	},
79462306a36Sopenharmony_ci	{
79562306a36Sopenharmony_ci		.procname	= "tcp_fwmark_accept",
79662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_fwmark_accept,
79762306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
79862306a36Sopenharmony_ci		.mode		= 0644,
79962306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
80062306a36Sopenharmony_ci	},
80162306a36Sopenharmony_ci#ifdef CONFIG_NET_L3_MASTER_DEV
80262306a36Sopenharmony_ci	{
80362306a36Sopenharmony_ci		.procname	= "tcp_l3mdev_accept",
80462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_l3mdev_accept,
80562306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
80662306a36Sopenharmony_ci		.mode		= 0644,
80762306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
80862306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
80962306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
81062306a36Sopenharmony_ci	},
81162306a36Sopenharmony_ci#endif
81262306a36Sopenharmony_ci	{
81362306a36Sopenharmony_ci		.procname	= "tcp_mtu_probing",
81462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_mtu_probing,
81562306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
81662306a36Sopenharmony_ci		.mode		= 0644,
81762306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
81862306a36Sopenharmony_ci	},
81962306a36Sopenharmony_ci	{
82062306a36Sopenharmony_ci		.procname	= "tcp_base_mss",
82162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_base_mss,
82262306a36Sopenharmony_ci		.maxlen		= sizeof(int),
82362306a36Sopenharmony_ci		.mode		= 0644,
82462306a36Sopenharmony_ci		.proc_handler	= proc_dointvec,
82562306a36Sopenharmony_ci	},
82662306a36Sopenharmony_ci	{
82762306a36Sopenharmony_ci		.procname	= "tcp_min_snd_mss",
82862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_min_snd_mss,
82962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
83062306a36Sopenharmony_ci		.mode		= 0644,
83162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
83262306a36Sopenharmony_ci		.extra1		= &tcp_min_snd_mss_min,
83362306a36Sopenharmony_ci		.extra2		= &tcp_min_snd_mss_max,
83462306a36Sopenharmony_ci	},
83562306a36Sopenharmony_ci	{
83662306a36Sopenharmony_ci		.procname	= "tcp_mtu_probe_floor",
83762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_mtu_probe_floor,
83862306a36Sopenharmony_ci		.maxlen		= sizeof(int),
83962306a36Sopenharmony_ci		.mode		= 0644,
84062306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
84162306a36Sopenharmony_ci		.extra1		= &tcp_min_snd_mss_min,
84262306a36Sopenharmony_ci		.extra2		= &tcp_min_snd_mss_max,
84362306a36Sopenharmony_ci	},
84462306a36Sopenharmony_ci	{
84562306a36Sopenharmony_ci		.procname	= "tcp_probe_threshold",
84662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_probe_threshold,
84762306a36Sopenharmony_ci		.maxlen		= sizeof(int),
84862306a36Sopenharmony_ci		.mode		= 0644,
84962306a36Sopenharmony_ci		.proc_handler	= proc_dointvec,
85062306a36Sopenharmony_ci	},
85162306a36Sopenharmony_ci	{
85262306a36Sopenharmony_ci		.procname	= "tcp_probe_interval",
85362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_probe_interval,
85462306a36Sopenharmony_ci		.maxlen		= sizeof(u32),
85562306a36Sopenharmony_ci		.mode		= 0644,
85662306a36Sopenharmony_ci		.proc_handler	= proc_douintvec_minmax,
85762306a36Sopenharmony_ci		.extra2		= &u32_max_div_HZ,
85862306a36Sopenharmony_ci	},
85962306a36Sopenharmony_ci	{
86062306a36Sopenharmony_ci		.procname	= "igmp_link_local_mcast_reports",
86162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_igmp_llm_reports,
86262306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
86362306a36Sopenharmony_ci		.mode		= 0644,
86462306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
86562306a36Sopenharmony_ci	},
86662306a36Sopenharmony_ci	{
86762306a36Sopenharmony_ci		.procname	= "igmp_max_memberships",
86862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_igmp_max_memberships,
86962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
87062306a36Sopenharmony_ci		.mode		= 0644,
87162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
87262306a36Sopenharmony_ci	},
87362306a36Sopenharmony_ci	{
87462306a36Sopenharmony_ci		.procname	= "igmp_max_msf",
87562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_igmp_max_msf,
87662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
87762306a36Sopenharmony_ci		.mode		= 0644,
87862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
87962306a36Sopenharmony_ci	},
88062306a36Sopenharmony_ci#ifdef CONFIG_IP_MULTICAST
88162306a36Sopenharmony_ci	{
88262306a36Sopenharmony_ci		.procname	= "igmp_qrv",
88362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_igmp_qrv,
88462306a36Sopenharmony_ci		.maxlen		= sizeof(int),
88562306a36Sopenharmony_ci		.mode		= 0644,
88662306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
88762306a36Sopenharmony_ci		.extra1		= SYSCTL_ONE
88862306a36Sopenharmony_ci	},
88962306a36Sopenharmony_ci#endif
89062306a36Sopenharmony_ci	{
89162306a36Sopenharmony_ci		.procname	= "tcp_congestion_control",
89262306a36Sopenharmony_ci		.data		= &init_net.ipv4.tcp_congestion_control,
89362306a36Sopenharmony_ci		.mode		= 0644,
89462306a36Sopenharmony_ci		.maxlen		= TCP_CA_NAME_MAX,
89562306a36Sopenharmony_ci		.proc_handler	= proc_tcp_congestion_control,
89662306a36Sopenharmony_ci	},
89762306a36Sopenharmony_ci	{
89862306a36Sopenharmony_ci		.procname	= "tcp_available_congestion_control",
89962306a36Sopenharmony_ci		.maxlen		= TCP_CA_BUF_MAX,
90062306a36Sopenharmony_ci		.mode		= 0444,
90162306a36Sopenharmony_ci		.proc_handler   = proc_tcp_available_congestion_control,
90262306a36Sopenharmony_ci	},
90362306a36Sopenharmony_ci	{
90462306a36Sopenharmony_ci		.procname	= "tcp_allowed_congestion_control",
90562306a36Sopenharmony_ci		.maxlen		= TCP_CA_BUF_MAX,
90662306a36Sopenharmony_ci		.mode		= 0644,
90762306a36Sopenharmony_ci		.proc_handler   = proc_allowed_congestion_control,
90862306a36Sopenharmony_ci	},
90962306a36Sopenharmony_ci	{
91062306a36Sopenharmony_ci		.procname	= "tcp_keepalive_time",
91162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_keepalive_time,
91262306a36Sopenharmony_ci		.maxlen		= sizeof(int),
91362306a36Sopenharmony_ci		.mode		= 0644,
91462306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_jiffies,
91562306a36Sopenharmony_ci	},
91662306a36Sopenharmony_ci	{
91762306a36Sopenharmony_ci		.procname	= "tcp_keepalive_probes",
91862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_keepalive_probes,
91962306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
92062306a36Sopenharmony_ci		.mode		= 0644,
92162306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
92262306a36Sopenharmony_ci	},
92362306a36Sopenharmony_ci	{
92462306a36Sopenharmony_ci		.procname	= "tcp_keepalive_intvl",
92562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_keepalive_intvl,
92662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
92762306a36Sopenharmony_ci		.mode		= 0644,
92862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_jiffies,
92962306a36Sopenharmony_ci	},
93062306a36Sopenharmony_ci	{
93162306a36Sopenharmony_ci		.procname	= "tcp_syn_retries",
93262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_syn_retries,
93362306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
93462306a36Sopenharmony_ci		.mode		= 0644,
93562306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
93662306a36Sopenharmony_ci		.extra1		= &tcp_syn_retries_min,
93762306a36Sopenharmony_ci		.extra2		= &tcp_syn_retries_max
93862306a36Sopenharmony_ci	},
93962306a36Sopenharmony_ci	{
94062306a36Sopenharmony_ci		.procname	= "tcp_synack_retries",
94162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_synack_retries,
94262306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
94362306a36Sopenharmony_ci		.mode		= 0644,
94462306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
94562306a36Sopenharmony_ci	},
94662306a36Sopenharmony_ci#ifdef CONFIG_SYN_COOKIES
94762306a36Sopenharmony_ci	{
94862306a36Sopenharmony_ci		.procname	= "tcp_syncookies",
94962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_syncookies,
95062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
95162306a36Sopenharmony_ci		.mode		= 0644,
95262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
95362306a36Sopenharmony_ci	},
95462306a36Sopenharmony_ci#endif
95562306a36Sopenharmony_ci	{
95662306a36Sopenharmony_ci		.procname	= "tcp_migrate_req",
95762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_migrate_req,
95862306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
95962306a36Sopenharmony_ci		.mode		= 0644,
96062306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
96162306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
96262306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE
96362306a36Sopenharmony_ci	},
96462306a36Sopenharmony_ci	{
96562306a36Sopenharmony_ci		.procname	= "tcp_reordering",
96662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_reordering,
96762306a36Sopenharmony_ci		.maxlen		= sizeof(int),
96862306a36Sopenharmony_ci		.mode		= 0644,
96962306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
97062306a36Sopenharmony_ci	},
97162306a36Sopenharmony_ci	{
97262306a36Sopenharmony_ci		.procname	= "tcp_retries1",
97362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_retries1,
97462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
97562306a36Sopenharmony_ci		.mode		= 0644,
97662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
97762306a36Sopenharmony_ci		.extra2		= &tcp_retr1_max
97862306a36Sopenharmony_ci	},
97962306a36Sopenharmony_ci	{
98062306a36Sopenharmony_ci		.procname	= "tcp_retries2",
98162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_retries2,
98262306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
98362306a36Sopenharmony_ci		.mode		= 0644,
98462306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
98562306a36Sopenharmony_ci	},
98662306a36Sopenharmony_ci	{
98762306a36Sopenharmony_ci		.procname	= "tcp_orphan_retries",
98862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_orphan_retries,
98962306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
99062306a36Sopenharmony_ci		.mode		= 0644,
99162306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
99262306a36Sopenharmony_ci	},
99362306a36Sopenharmony_ci	{
99462306a36Sopenharmony_ci		.procname	= "tcp_fin_timeout",
99562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_fin_timeout,
99662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
99762306a36Sopenharmony_ci		.mode		= 0644,
99862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_jiffies,
99962306a36Sopenharmony_ci	},
100062306a36Sopenharmony_ci	{
100162306a36Sopenharmony_ci		.procname	= "tcp_notsent_lowat",
100262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_notsent_lowat,
100362306a36Sopenharmony_ci		.maxlen		= sizeof(unsigned int),
100462306a36Sopenharmony_ci		.mode		= 0644,
100562306a36Sopenharmony_ci		.proc_handler	= proc_douintvec,
100662306a36Sopenharmony_ci	},
100762306a36Sopenharmony_ci	{
100862306a36Sopenharmony_ci		.procname	= "tcp_tw_reuse",
100962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_tw_reuse,
101062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
101162306a36Sopenharmony_ci		.mode		= 0644,
101262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
101362306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
101462306a36Sopenharmony_ci		.extra2		= SYSCTL_TWO,
101562306a36Sopenharmony_ci	},
101662306a36Sopenharmony_ci	{
101762306a36Sopenharmony_ci		.procname	= "tcp_max_syn_backlog",
101862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_max_syn_backlog,
101962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
102062306a36Sopenharmony_ci		.mode		= 0644,
102162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
102262306a36Sopenharmony_ci	},
102362306a36Sopenharmony_ci	{
102462306a36Sopenharmony_ci		.procname	= "tcp_fastopen",
102562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_fastopen,
102662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
102762306a36Sopenharmony_ci		.mode		= 0644,
102862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec,
102962306a36Sopenharmony_ci	},
103062306a36Sopenharmony_ci	{
103162306a36Sopenharmony_ci		.procname	= "tcp_fastopen_key",
103262306a36Sopenharmony_ci		.mode		= 0600,
103362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_fastopen,
103462306a36Sopenharmony_ci		/* maxlen to print the list of keys in hex (*2), with dashes
103562306a36Sopenharmony_ci		 * separating doublewords and a comma in between keys.
103662306a36Sopenharmony_ci		 */
103762306a36Sopenharmony_ci		.maxlen		= ((TCP_FASTOPEN_KEY_LENGTH *
103862306a36Sopenharmony_ci				   2 * TCP_FASTOPEN_KEY_MAX) +
103962306a36Sopenharmony_ci				   (TCP_FASTOPEN_KEY_MAX * 5)),
104062306a36Sopenharmony_ci		.proc_handler	= proc_tcp_fastopen_key,
104162306a36Sopenharmony_ci	},
104262306a36Sopenharmony_ci	{
104362306a36Sopenharmony_ci		.procname	= "tcp_fastopen_blackhole_timeout_sec",
104462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_fastopen_blackhole_timeout,
104562306a36Sopenharmony_ci		.maxlen		= sizeof(int),
104662306a36Sopenharmony_ci		.mode		= 0644,
104762306a36Sopenharmony_ci		.proc_handler	= proc_tfo_blackhole_detect_timeout,
104862306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
104962306a36Sopenharmony_ci	},
105062306a36Sopenharmony_ci#ifdef CONFIG_IP_ROUTE_MULTIPATH
105162306a36Sopenharmony_ci	{
105262306a36Sopenharmony_ci		.procname	= "fib_multipath_use_neigh",
105362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_fib_multipath_use_neigh,
105462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
105562306a36Sopenharmony_ci		.mode		= 0644,
105662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
105762306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
105862306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
105962306a36Sopenharmony_ci	},
106062306a36Sopenharmony_ci	{
106162306a36Sopenharmony_ci		.procname	= "fib_multipath_hash_policy",
106262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_fib_multipath_hash_policy,
106362306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
106462306a36Sopenharmony_ci		.mode		= 0644,
106562306a36Sopenharmony_ci		.proc_handler	= proc_fib_multipath_hash_policy,
106662306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
106762306a36Sopenharmony_ci		.extra2		= SYSCTL_THREE,
106862306a36Sopenharmony_ci	},
106962306a36Sopenharmony_ci	{
107062306a36Sopenharmony_ci		.procname	= "fib_multipath_hash_fields",
107162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_fib_multipath_hash_fields,
107262306a36Sopenharmony_ci		.maxlen		= sizeof(u32),
107362306a36Sopenharmony_ci		.mode		= 0644,
107462306a36Sopenharmony_ci		.proc_handler	= proc_fib_multipath_hash_fields,
107562306a36Sopenharmony_ci		.extra1		= SYSCTL_ONE,
107662306a36Sopenharmony_ci		.extra2		= &fib_multipath_hash_fields_all_mask,
107762306a36Sopenharmony_ci	},
107862306a36Sopenharmony_ci#endif
107962306a36Sopenharmony_ci	{
108062306a36Sopenharmony_ci		.procname	= "ip_unprivileged_port_start",
108162306a36Sopenharmony_ci		.maxlen		= sizeof(int),
108262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_ip_prot_sock,
108362306a36Sopenharmony_ci		.mode		= 0644,
108462306a36Sopenharmony_ci		.proc_handler	= ipv4_privileged_ports,
108562306a36Sopenharmony_ci	},
108662306a36Sopenharmony_ci#ifdef CONFIG_NET_L3_MASTER_DEV
108762306a36Sopenharmony_ci	{
108862306a36Sopenharmony_ci		.procname	= "udp_l3mdev_accept",
108962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_udp_l3mdev_accept,
109062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
109162306a36Sopenharmony_ci		.mode		= 0644,
109262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
109362306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
109462306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
109562306a36Sopenharmony_ci	},
109662306a36Sopenharmony_ci#endif
109762306a36Sopenharmony_ci	{
109862306a36Sopenharmony_ci		.procname	= "tcp_sack",
109962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_sack,
110062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
110162306a36Sopenharmony_ci		.mode		= 0644,
110262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
110362306a36Sopenharmony_ci	},
110462306a36Sopenharmony_ci	{
110562306a36Sopenharmony_ci		.procname	= "tcp_window_scaling",
110662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_window_scaling,
110762306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
110862306a36Sopenharmony_ci		.mode		= 0644,
110962306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
111062306a36Sopenharmony_ci	},
111162306a36Sopenharmony_ci	{
111262306a36Sopenharmony_ci		.procname	= "tcp_timestamps",
111362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_timestamps,
111462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
111562306a36Sopenharmony_ci		.mode		= 0644,
111662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
111762306a36Sopenharmony_ci	},
111862306a36Sopenharmony_ci	{
111962306a36Sopenharmony_ci		.procname	= "tcp_early_retrans",
112062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_early_retrans,
112162306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
112262306a36Sopenharmony_ci		.mode		= 0644,
112362306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
112462306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
112562306a36Sopenharmony_ci		.extra2		= SYSCTL_FOUR,
112662306a36Sopenharmony_ci	},
112762306a36Sopenharmony_ci	{
112862306a36Sopenharmony_ci		.procname	= "tcp_recovery",
112962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_recovery,
113062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
113162306a36Sopenharmony_ci		.mode		= 0644,
113262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
113362306a36Sopenharmony_ci	},
113462306a36Sopenharmony_ci	{
113562306a36Sopenharmony_ci		.procname       = "tcp_thin_linear_timeouts",
113662306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_thin_linear_timeouts,
113762306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
113862306a36Sopenharmony_ci		.mode           = 0644,
113962306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
114062306a36Sopenharmony_ci	},
114162306a36Sopenharmony_ci	{
114262306a36Sopenharmony_ci		.procname	= "tcp_slow_start_after_idle",
114362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_slow_start_after_idle,
114462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
114562306a36Sopenharmony_ci		.mode		= 0644,
114662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
114762306a36Sopenharmony_ci	},
114862306a36Sopenharmony_ci	{
114962306a36Sopenharmony_ci		.procname	= "tcp_retrans_collapse",
115062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_retrans_collapse,
115162306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
115262306a36Sopenharmony_ci		.mode		= 0644,
115362306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
115462306a36Sopenharmony_ci	},
115562306a36Sopenharmony_ci	{
115662306a36Sopenharmony_ci		.procname	= "tcp_stdurg",
115762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_stdurg,
115862306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
115962306a36Sopenharmony_ci		.mode		= 0644,
116062306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
116162306a36Sopenharmony_ci	},
116262306a36Sopenharmony_ci	{
116362306a36Sopenharmony_ci		.procname	= "tcp_rfc1337",
116462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_rfc1337,
116562306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
116662306a36Sopenharmony_ci		.mode		= 0644,
116762306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
116862306a36Sopenharmony_ci	},
116962306a36Sopenharmony_ci	{
117062306a36Sopenharmony_ci		.procname	= "tcp_abort_on_overflow",
117162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_abort_on_overflow,
117262306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
117362306a36Sopenharmony_ci		.mode		= 0644,
117462306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
117562306a36Sopenharmony_ci	},
117662306a36Sopenharmony_ci	{
117762306a36Sopenharmony_ci		.procname	= "tcp_fack",
117862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_fack,
117962306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
118062306a36Sopenharmony_ci		.mode		= 0644,
118162306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
118262306a36Sopenharmony_ci	},
118362306a36Sopenharmony_ci	{
118462306a36Sopenharmony_ci		.procname	= "tcp_max_reordering",
118562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_max_reordering,
118662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
118762306a36Sopenharmony_ci		.mode		= 0644,
118862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
118962306a36Sopenharmony_ci	},
119062306a36Sopenharmony_ci	{
119162306a36Sopenharmony_ci		.procname	= "tcp_dsack",
119262306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_dsack,
119362306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
119462306a36Sopenharmony_ci		.mode		= 0644,
119562306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
119662306a36Sopenharmony_ci	},
119762306a36Sopenharmony_ci	{
119862306a36Sopenharmony_ci		.procname	= "tcp_app_win",
119962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_app_win,
120062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
120162306a36Sopenharmony_ci		.mode		= 0644,
120262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
120362306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
120462306a36Sopenharmony_ci		.extra2		= &tcp_app_win_max,
120562306a36Sopenharmony_ci	},
120662306a36Sopenharmony_ci	{
120762306a36Sopenharmony_ci		.procname	= "tcp_adv_win_scale",
120862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_adv_win_scale,
120962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
121062306a36Sopenharmony_ci		.mode		= 0644,
121162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
121262306a36Sopenharmony_ci		.extra1		= &tcp_adv_win_scale_min,
121362306a36Sopenharmony_ci		.extra2		= &tcp_adv_win_scale_max,
121462306a36Sopenharmony_ci	},
121562306a36Sopenharmony_ci	{
121662306a36Sopenharmony_ci		.procname	= "tcp_frto",
121762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_frto,
121862306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
121962306a36Sopenharmony_ci		.mode		= 0644,
122062306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
122162306a36Sopenharmony_ci	},
122262306a36Sopenharmony_ci	{
122362306a36Sopenharmony_ci		.procname	= "tcp_no_metrics_save",
122462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_nometrics_save,
122562306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
122662306a36Sopenharmony_ci		.mode		= 0644,
122762306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
122862306a36Sopenharmony_ci	},
122962306a36Sopenharmony_ci	{
123062306a36Sopenharmony_ci		.procname	= "tcp_no_ssthresh_metrics_save",
123162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_no_ssthresh_metrics_save,
123262306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
123362306a36Sopenharmony_ci		.mode		= 0644,
123462306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
123562306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
123662306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
123762306a36Sopenharmony_ci	},
123862306a36Sopenharmony_ci	{
123962306a36Sopenharmony_ci		.procname	= "tcp_moderate_rcvbuf",
124062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_moderate_rcvbuf,
124162306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
124262306a36Sopenharmony_ci		.mode		= 0644,
124362306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
124462306a36Sopenharmony_ci	},
124562306a36Sopenharmony_ci	{
124662306a36Sopenharmony_ci		.procname	= "tcp_tso_win_divisor",
124762306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_tso_win_divisor,
124862306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
124962306a36Sopenharmony_ci		.mode		= 0644,
125062306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
125162306a36Sopenharmony_ci	},
125262306a36Sopenharmony_ci	{
125362306a36Sopenharmony_ci		.procname	= "tcp_workaround_signed_windows",
125462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_workaround_signed_windows,
125562306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
125662306a36Sopenharmony_ci		.mode		= 0644,
125762306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
125862306a36Sopenharmony_ci	},
125962306a36Sopenharmony_ci	{
126062306a36Sopenharmony_ci		.procname	= "tcp_limit_output_bytes",
126162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_limit_output_bytes,
126262306a36Sopenharmony_ci		.maxlen		= sizeof(int),
126362306a36Sopenharmony_ci		.mode		= 0644,
126462306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
126562306a36Sopenharmony_ci	},
126662306a36Sopenharmony_ci	{
126762306a36Sopenharmony_ci		.procname	= "tcp_challenge_ack_limit",
126862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_challenge_ack_limit,
126962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
127062306a36Sopenharmony_ci		.mode		= 0644,
127162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec
127262306a36Sopenharmony_ci	},
127362306a36Sopenharmony_ci	{
127462306a36Sopenharmony_ci		.procname	= "tcp_min_tso_segs",
127562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_min_tso_segs,
127662306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
127762306a36Sopenharmony_ci		.mode		= 0644,
127862306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
127962306a36Sopenharmony_ci		.extra1		= SYSCTL_ONE,
128062306a36Sopenharmony_ci	},
128162306a36Sopenharmony_ci	{
128262306a36Sopenharmony_ci		.procname	= "tcp_tso_rtt_log",
128362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_tso_rtt_log,
128462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
128562306a36Sopenharmony_ci		.mode		= 0644,
128662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
128762306a36Sopenharmony_ci	},
128862306a36Sopenharmony_ci	{
128962306a36Sopenharmony_ci		.procname	= "tcp_min_rtt_wlen",
129062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_min_rtt_wlen,
129162306a36Sopenharmony_ci		.maxlen		= sizeof(int),
129262306a36Sopenharmony_ci		.mode		= 0644,
129362306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
129462306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
129562306a36Sopenharmony_ci		.extra2		= &one_day_secs
129662306a36Sopenharmony_ci	},
129762306a36Sopenharmony_ci	{
129862306a36Sopenharmony_ci		.procname	= "tcp_autocorking",
129962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_autocorking,
130062306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
130162306a36Sopenharmony_ci		.mode		= 0644,
130262306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
130362306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
130462306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
130562306a36Sopenharmony_ci	},
130662306a36Sopenharmony_ci	{
130762306a36Sopenharmony_ci		.procname	= "tcp_invalid_ratelimit",
130862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_invalid_ratelimit,
130962306a36Sopenharmony_ci		.maxlen		= sizeof(int),
131062306a36Sopenharmony_ci		.mode		= 0644,
131162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_ms_jiffies,
131262306a36Sopenharmony_ci	},
131362306a36Sopenharmony_ci	{
131462306a36Sopenharmony_ci		.procname	= "tcp_pacing_ss_ratio",
131562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_pacing_ss_ratio,
131662306a36Sopenharmony_ci		.maxlen		= sizeof(int),
131762306a36Sopenharmony_ci		.mode		= 0644,
131862306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
131962306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
132062306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE_THOUSAND,
132162306a36Sopenharmony_ci	},
132262306a36Sopenharmony_ci	{
132362306a36Sopenharmony_ci		.procname	= "tcp_pacing_ca_ratio",
132462306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_pacing_ca_ratio,
132562306a36Sopenharmony_ci		.maxlen		= sizeof(int),
132662306a36Sopenharmony_ci		.mode		= 0644,
132762306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
132862306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
132962306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE_THOUSAND,
133062306a36Sopenharmony_ci	},
133162306a36Sopenharmony_ci	{
133262306a36Sopenharmony_ci		.procname	= "tcp_wmem",
133362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_wmem,
133462306a36Sopenharmony_ci		.maxlen		= sizeof(init_net.ipv4.sysctl_tcp_wmem),
133562306a36Sopenharmony_ci		.mode		= 0644,
133662306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
133762306a36Sopenharmony_ci		.extra1		= SYSCTL_ONE,
133862306a36Sopenharmony_ci	},
133962306a36Sopenharmony_ci	{
134062306a36Sopenharmony_ci		.procname	= "tcp_rmem",
134162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_rmem,
134262306a36Sopenharmony_ci		.maxlen		= sizeof(init_net.ipv4.sysctl_tcp_rmem),
134362306a36Sopenharmony_ci		.mode		= 0644,
134462306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
134562306a36Sopenharmony_ci		.extra1		= SYSCTL_ONE,
134662306a36Sopenharmony_ci	},
134762306a36Sopenharmony_ci	{
134862306a36Sopenharmony_ci		.procname	= "tcp_comp_sack_delay_ns",
134962306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_comp_sack_delay_ns,
135062306a36Sopenharmony_ci		.maxlen		= sizeof(unsigned long),
135162306a36Sopenharmony_ci		.mode		= 0644,
135262306a36Sopenharmony_ci		.proc_handler	= proc_doulongvec_minmax,
135362306a36Sopenharmony_ci	},
135462306a36Sopenharmony_ci	{
135562306a36Sopenharmony_ci		.procname	= "tcp_comp_sack_slack_ns",
135662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_comp_sack_slack_ns,
135762306a36Sopenharmony_ci		.maxlen		= sizeof(unsigned long),
135862306a36Sopenharmony_ci		.mode		= 0644,
135962306a36Sopenharmony_ci		.proc_handler	= proc_doulongvec_minmax,
136062306a36Sopenharmony_ci	},
136162306a36Sopenharmony_ci	{
136262306a36Sopenharmony_ci		.procname	= "tcp_comp_sack_nr",
136362306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_comp_sack_nr,
136462306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
136562306a36Sopenharmony_ci		.mode		= 0644,
136662306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
136762306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
136862306a36Sopenharmony_ci	},
136962306a36Sopenharmony_ci	{
137062306a36Sopenharmony_ci		.procname       = "tcp_reflect_tos",
137162306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_reflect_tos,
137262306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
137362306a36Sopenharmony_ci		.mode           = 0644,
137462306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
137562306a36Sopenharmony_ci		.extra1         = SYSCTL_ZERO,
137662306a36Sopenharmony_ci		.extra2         = SYSCTL_ONE,
137762306a36Sopenharmony_ci	},
137862306a36Sopenharmony_ci	{
137962306a36Sopenharmony_ci		.procname	= "tcp_ehash_entries",
138062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_child_ehash_entries,
138162306a36Sopenharmony_ci		.mode		= 0444,
138262306a36Sopenharmony_ci		.proc_handler	= proc_tcp_ehash_entries,
138362306a36Sopenharmony_ci	},
138462306a36Sopenharmony_ci	{
138562306a36Sopenharmony_ci		.procname	= "tcp_child_ehash_entries",
138662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_child_ehash_entries,
138762306a36Sopenharmony_ci		.maxlen		= sizeof(unsigned int),
138862306a36Sopenharmony_ci		.mode		= 0644,
138962306a36Sopenharmony_ci		.proc_handler	= proc_douintvec_minmax,
139062306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
139162306a36Sopenharmony_ci		.extra2		= &tcp_child_ehash_entries_max,
139262306a36Sopenharmony_ci	},
139362306a36Sopenharmony_ci	{
139462306a36Sopenharmony_ci		.procname	= "udp_hash_entries",
139562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_udp_child_hash_entries,
139662306a36Sopenharmony_ci		.mode		= 0444,
139762306a36Sopenharmony_ci		.proc_handler	= proc_udp_hash_entries,
139862306a36Sopenharmony_ci	},
139962306a36Sopenharmony_ci	{
140062306a36Sopenharmony_ci		.procname	= "udp_child_hash_entries",
140162306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_udp_child_hash_entries,
140262306a36Sopenharmony_ci		.maxlen		= sizeof(unsigned int),
140362306a36Sopenharmony_ci		.mode		= 0644,
140462306a36Sopenharmony_ci		.proc_handler	= proc_douintvec_minmax,
140562306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
140662306a36Sopenharmony_ci		.extra2		= &udp_child_hash_entries_max,
140762306a36Sopenharmony_ci	},
140862306a36Sopenharmony_ci	{
140962306a36Sopenharmony_ci		.procname	= "udp_rmem_min",
141062306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_udp_rmem_min,
141162306a36Sopenharmony_ci		.maxlen		= sizeof(init_net.ipv4.sysctl_udp_rmem_min),
141262306a36Sopenharmony_ci		.mode		= 0644,
141362306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
141462306a36Sopenharmony_ci		.extra1		= SYSCTL_ONE
141562306a36Sopenharmony_ci	},
141662306a36Sopenharmony_ci	{
141762306a36Sopenharmony_ci		.procname	= "udp_wmem_min",
141862306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_udp_wmem_min,
141962306a36Sopenharmony_ci		.maxlen		= sizeof(init_net.ipv4.sysctl_udp_wmem_min),
142062306a36Sopenharmony_ci		.mode		= 0644,
142162306a36Sopenharmony_ci		.proc_handler	= proc_dointvec_minmax,
142262306a36Sopenharmony_ci		.extra1		= SYSCTL_ONE
142362306a36Sopenharmony_ci	},
142462306a36Sopenharmony_ci	{
142562306a36Sopenharmony_ci		.procname	= "fib_notify_on_flag_change",
142662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_fib_notify_on_flag_change,
142762306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
142862306a36Sopenharmony_ci		.mode		= 0644,
142962306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
143062306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
143162306a36Sopenharmony_ci		.extra2		= SYSCTL_TWO,
143262306a36Sopenharmony_ci	},
143362306a36Sopenharmony_ci	{
143462306a36Sopenharmony_ci		.procname       = "tcp_plb_enabled",
143562306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_plb_enabled,
143662306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
143762306a36Sopenharmony_ci		.mode           = 0644,
143862306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
143962306a36Sopenharmony_ci		.extra1         = SYSCTL_ZERO,
144062306a36Sopenharmony_ci		.extra2         = SYSCTL_ONE,
144162306a36Sopenharmony_ci	},
144262306a36Sopenharmony_ci	{
144362306a36Sopenharmony_ci		.procname       = "tcp_plb_idle_rehash_rounds",
144462306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_plb_idle_rehash_rounds,
144562306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
144662306a36Sopenharmony_ci		.mode           = 0644,
144762306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
144862306a36Sopenharmony_ci		.extra2		= &tcp_plb_max_rounds,
144962306a36Sopenharmony_ci	},
145062306a36Sopenharmony_ci	{
145162306a36Sopenharmony_ci		.procname       = "tcp_plb_rehash_rounds",
145262306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_plb_rehash_rounds,
145362306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
145462306a36Sopenharmony_ci		.mode           = 0644,
145562306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
145662306a36Sopenharmony_ci		.extra2         = &tcp_plb_max_rounds,
145762306a36Sopenharmony_ci	},
145862306a36Sopenharmony_ci	{
145962306a36Sopenharmony_ci		.procname       = "tcp_plb_suspend_rto_sec",
146062306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_plb_suspend_rto_sec,
146162306a36Sopenharmony_ci		.maxlen         = sizeof(u8),
146262306a36Sopenharmony_ci		.mode           = 0644,
146362306a36Sopenharmony_ci		.proc_handler   = proc_dou8vec_minmax,
146462306a36Sopenharmony_ci	},
146562306a36Sopenharmony_ci	{
146662306a36Sopenharmony_ci		.procname       = "tcp_plb_cong_thresh",
146762306a36Sopenharmony_ci		.data           = &init_net.ipv4.sysctl_tcp_plb_cong_thresh,
146862306a36Sopenharmony_ci		.maxlen         = sizeof(int),
146962306a36Sopenharmony_ci		.mode           = 0644,
147062306a36Sopenharmony_ci		.proc_handler   = proc_dointvec_minmax,
147162306a36Sopenharmony_ci		.extra1         = SYSCTL_ZERO,
147262306a36Sopenharmony_ci		.extra2         = &tcp_plb_max_cong_thresh,
147362306a36Sopenharmony_ci	},
147462306a36Sopenharmony_ci	{
147562306a36Sopenharmony_ci		.procname	= "tcp_syn_linear_timeouts",
147662306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_syn_linear_timeouts,
147762306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
147862306a36Sopenharmony_ci		.mode		= 0644,
147962306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
148062306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
148162306a36Sopenharmony_ci		.extra2		= &tcp_syn_linear_timeouts_max,
148262306a36Sopenharmony_ci	},
148362306a36Sopenharmony_ci	{
148462306a36Sopenharmony_ci		.procname	= "tcp_shrink_window",
148562306a36Sopenharmony_ci		.data		= &init_net.ipv4.sysctl_tcp_shrink_window,
148662306a36Sopenharmony_ci		.maxlen		= sizeof(u8),
148762306a36Sopenharmony_ci		.mode		= 0644,
148862306a36Sopenharmony_ci		.proc_handler	= proc_dou8vec_minmax,
148962306a36Sopenharmony_ci		.extra1		= SYSCTL_ZERO,
149062306a36Sopenharmony_ci		.extra2		= SYSCTL_ONE,
149162306a36Sopenharmony_ci	},
149262306a36Sopenharmony_ci	{ }
149362306a36Sopenharmony_ci};
149462306a36Sopenharmony_ci
149562306a36Sopenharmony_cistatic __net_init int ipv4_sysctl_init_net(struct net *net)
149662306a36Sopenharmony_ci{
149762306a36Sopenharmony_ci	struct ctl_table *table;
149862306a36Sopenharmony_ci
149962306a36Sopenharmony_ci	table = ipv4_net_table;
150062306a36Sopenharmony_ci	if (!net_eq(net, &init_net)) {
150162306a36Sopenharmony_ci		int i;
150262306a36Sopenharmony_ci
150362306a36Sopenharmony_ci		table = kmemdup(table, sizeof(ipv4_net_table), GFP_KERNEL);
150462306a36Sopenharmony_ci		if (!table)
150562306a36Sopenharmony_ci			goto err_alloc;
150662306a36Sopenharmony_ci
150762306a36Sopenharmony_ci		for (i = 0; i < ARRAY_SIZE(ipv4_net_table) - 1; i++) {
150862306a36Sopenharmony_ci			if (table[i].data) {
150962306a36Sopenharmony_ci				/* Update the variables to point into
151062306a36Sopenharmony_ci				 * the current struct net
151162306a36Sopenharmony_ci				 */
151262306a36Sopenharmony_ci				table[i].data += (void *)net - (void *)&init_net;
151362306a36Sopenharmony_ci			} else {
151462306a36Sopenharmony_ci				/* Entries without data pointer are global;
151562306a36Sopenharmony_ci				 * Make them read-only in non-init_net ns
151662306a36Sopenharmony_ci				 */
151762306a36Sopenharmony_ci				table[i].mode &= ~0222;
151862306a36Sopenharmony_ci			}
151962306a36Sopenharmony_ci		}
152062306a36Sopenharmony_ci	}
152162306a36Sopenharmony_ci
152262306a36Sopenharmony_ci	net->ipv4.ipv4_hdr = register_net_sysctl_sz(net, "net/ipv4", table,
152362306a36Sopenharmony_ci						    ARRAY_SIZE(ipv4_net_table));
152462306a36Sopenharmony_ci	if (!net->ipv4.ipv4_hdr)
152562306a36Sopenharmony_ci		goto err_reg;
152662306a36Sopenharmony_ci
152762306a36Sopenharmony_ci	net->ipv4.sysctl_local_reserved_ports = kzalloc(65536 / 8, GFP_KERNEL);
152862306a36Sopenharmony_ci	if (!net->ipv4.sysctl_local_reserved_ports)
152962306a36Sopenharmony_ci		goto err_ports;
153062306a36Sopenharmony_ci
153162306a36Sopenharmony_ci	return 0;
153262306a36Sopenharmony_ci
153362306a36Sopenharmony_cierr_ports:
153462306a36Sopenharmony_ci	unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
153562306a36Sopenharmony_cierr_reg:
153662306a36Sopenharmony_ci	if (!net_eq(net, &init_net))
153762306a36Sopenharmony_ci		kfree(table);
153862306a36Sopenharmony_cierr_alloc:
153962306a36Sopenharmony_ci	return -ENOMEM;
154062306a36Sopenharmony_ci}
154162306a36Sopenharmony_ci
154262306a36Sopenharmony_cistatic __net_exit void ipv4_sysctl_exit_net(struct net *net)
154362306a36Sopenharmony_ci{
154462306a36Sopenharmony_ci	struct ctl_table *table;
154562306a36Sopenharmony_ci
154662306a36Sopenharmony_ci	kfree(net->ipv4.sysctl_local_reserved_ports);
154762306a36Sopenharmony_ci	table = net->ipv4.ipv4_hdr->ctl_table_arg;
154862306a36Sopenharmony_ci	unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
154962306a36Sopenharmony_ci	kfree(table);
155062306a36Sopenharmony_ci}
155162306a36Sopenharmony_ci
155262306a36Sopenharmony_cistatic __net_initdata struct pernet_operations ipv4_sysctl_ops = {
155362306a36Sopenharmony_ci	.init = ipv4_sysctl_init_net,
155462306a36Sopenharmony_ci	.exit = ipv4_sysctl_exit_net,
155562306a36Sopenharmony_ci};
155662306a36Sopenharmony_ci
155762306a36Sopenharmony_cistatic __init int sysctl_ipv4_init(void)
155862306a36Sopenharmony_ci{
155962306a36Sopenharmony_ci	struct ctl_table_header *hdr;
156062306a36Sopenharmony_ci
156162306a36Sopenharmony_ci	hdr = register_net_sysctl(&init_net, "net/ipv4", ipv4_table);
156262306a36Sopenharmony_ci	if (!hdr)
156362306a36Sopenharmony_ci		return -ENOMEM;
156462306a36Sopenharmony_ci
156562306a36Sopenharmony_ci	if (register_pernet_subsys(&ipv4_sysctl_ops)) {
156662306a36Sopenharmony_ci		unregister_net_sysctl_table(hdr);
156762306a36Sopenharmony_ci		return -ENOMEM;
156862306a36Sopenharmony_ci	}
156962306a36Sopenharmony_ci
157062306a36Sopenharmony_ci	return 0;
157162306a36Sopenharmony_ci}
157262306a36Sopenharmony_ci
157362306a36Sopenharmony_ci__initcall(sysctl_ipv4_init);
1574