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