11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* -*- linux-c -*- 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * sysctl_net_core.c: sysctl interface to net core subsystem. 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Begun April 1, 1996, Mike Shaver. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Added /proc/sys/net/core directory entry (empty =) ). [MS] 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/mm.h> 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/sysctl.h> 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/module.h> 1120380731bc2897f2952ae055420972ded4cd786eArnaldo Carvalho de Melo#include <linux/socket.h> 12a37ae4086e7e804db534bc8f2d31c2fbf89c5761Pavel Emelyanov#include <linux/netdevice.h> 133fff4c42bd0a89869a0eb1e7874cc06ffa4aa0f5Ingo Molnar#include <linux/ratelimit.h> 14fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert#include <linux/vmalloc.h> 1533eb9cfc700ae9ce621d47d6ca6d6b4ad7cd97f3Pavel Emelyanov#include <linux/init.h> 165a0e3ad6af8660be21ca98a971cd00f331318c05Tejun Heo#include <linux/slab.h> 177426a5645f3d18daec1f7d6a24b529ec7286b800Shan Wei#include <linux/kmemleak.h> 183fff4c42bd0a89869a0eb1e7874cc06ffa4aa0f5Ingo Molnar 1963d819caebcc3ca260ca0214d29044293969aa2fHannes Eder#include <net/ip.h> 2020380731bc2897f2952ae055420972ded4cd786eArnaldo Carvalho de Melo#include <net/sock.h> 21c5c177b4aca83338781e72be2e6dd1601c560cb3David S. Miller#include <net/net_ratelimit.h> 22076bb0c82a44fbe46fe2c8527a5b5b64b69f679dEliezer Tamir#include <net/busy_poll.h> 236da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger#include <net/pkt_sched.h> 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 255f671d6b4ec3e6d66c2a868738af2cdea09e7509Roman Gushchinstatic int zero = 0; 26cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.comstatic int one = 1; 275f671d6b4ec3e6d66c2a868738af2cdea09e7509Roman Gushchinstatic int ushort_max = USHRT_MAX; 28cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com 29fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert#ifdef CONFIG_RPS 30fe2c6338fd2c6f383c4d4164262f35c8f3708e1fJoe Perchesstatic int rps_sock_flow_sysctl(struct ctl_table *table, int write, 31fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert void __user *buffer, size_t *lenp, loff_t *ppos) 32fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert{ 33fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert unsigned int orig_size, size; 34fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert int ret, i; 35fe2c6338fd2c6f383c4d4164262f35c8f3708e1fJoe Perches struct ctl_table tmp = { 36fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert .data = &size, 37fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert .maxlen = sizeof(size), 38fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert .mode = table->mode 39fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert }; 40fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert struct rps_sock_flow_table *orig_sock_table, *sock_table; 41fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert static DEFINE_MUTEX(sock_flow_mutex); 42fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 43fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert mutex_lock(&sock_flow_mutex); 44fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 456e3f7faf3e8a3e226b1a6b955aac12abf2f2e1b6Eric Dumazet orig_sock_table = rcu_dereference_protected(rps_sock_flow_table, 466e3f7faf3e8a3e226b1a6b955aac12abf2f2e1b6Eric Dumazet lockdep_is_held(&sock_flow_mutex)); 47fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert size = orig_size = orig_sock_table ? orig_sock_table->mask + 1 : 0; 48fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 49fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert ret = proc_dointvec(&tmp, write, buffer, lenp, ppos); 50fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 51fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert if (write) { 52fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert if (size) { 53fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert if (size > 1<<30) { 54fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert /* Enforce limit to prevent overflow */ 55fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert mutex_unlock(&sock_flow_mutex); 56fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert return -EINVAL; 57fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert } 58fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert size = roundup_pow_of_two(size); 59fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert if (size != orig_size) { 60fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert sock_table = 61fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert vmalloc(RPS_SOCK_FLOW_TABLE_SIZE(size)); 62fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert if (!sock_table) { 63fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert mutex_unlock(&sock_flow_mutex); 64fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert return -ENOMEM; 65fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert } 66fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 67fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert sock_table->mask = size - 1; 68fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert } else 69fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert sock_table = orig_sock_table; 70fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 71fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert for (i = 0; i < size; i++) 72fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert sock_table->ents[i] = RPS_NO_CPU; 73fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert } else 74fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert sock_table = NULL; 75fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 76fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert if (sock_table != orig_sock_table) { 77fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert rcu_assign_pointer(rps_sock_flow_table, sock_table); 78adc9300e78e6091a7eaa1821213836379d4dbaa8Eric Dumazet if (sock_table) 79c5905afb0ee6550b42c49213da1c22d67316c194Ingo Molnar static_key_slow_inc(&rps_needed); 80adc9300e78e6091a7eaa1821213836379d4dbaa8Eric Dumazet if (orig_sock_table) { 81c5905afb0ee6550b42c49213da1c22d67316c194Ingo Molnar static_key_slow_dec(&rps_needed); 82adc9300e78e6091a7eaa1821213836379d4dbaa8Eric Dumazet synchronize_rcu(); 83adc9300e78e6091a7eaa1821213836379d4dbaa8Eric Dumazet vfree(orig_sock_table); 84adc9300e78e6091a7eaa1821213836379d4dbaa8Eric Dumazet } 85fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert } 86fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert } 87fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 88fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert mutex_unlock(&sock_flow_mutex); 89fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 90fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert return ret; 91fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert} 92fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert#endif /* CONFIG_RPS */ 93fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert 9499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn#ifdef CONFIG_NET_FLOW_LIMIT 9599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijnstatic DEFINE_MUTEX(flow_limit_update_mutex); 9699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 97fe2c6338fd2c6f383c4d4164262f35c8f3708e1fJoe Perchesstatic int flow_limit_cpu_sysctl(struct ctl_table *table, int write, 9899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn void __user *buffer, size_t *lenp, 9999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn loff_t *ppos) 10099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn{ 10199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn struct sd_flow_limit *cur; 10299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn struct softnet_data *sd; 10399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn cpumask_var_t mask; 10499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn int i, len, ret = 0; 10599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 10699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (!alloc_cpumask_var(&mask, GFP_KERNEL)) 10799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn return -ENOMEM; 10899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 10999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (write) { 11099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn ret = cpumask_parse_user(buffer, *lenp, mask); 11199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (ret) 11299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn goto done; 11399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 11499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn mutex_lock(&flow_limit_update_mutex); 11599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn len = sizeof(*cur) + netdev_flow_limit_table_len; 11699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn for_each_possible_cpu(i) { 11799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn sd = &per_cpu(softnet_data, i); 11899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn cur = rcu_dereference_protected(sd->flow_limit, 11999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn lockdep_is_held(&flow_limit_update_mutex)); 12099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (cur && !cpumask_test_cpu(i, mask)) { 12199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn RCU_INIT_POINTER(sd->flow_limit, NULL); 12299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn synchronize_rcu(); 12399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn kfree(cur); 12499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } else if (!cur && cpumask_test_cpu(i, mask)) { 1255b59d467ad9ff9c014b99f4cfc2ea627b0806d07Eric Dumazet cur = kzalloc_node(len, GFP_KERNEL, 1265b59d467ad9ff9c014b99f4cfc2ea627b0806d07Eric Dumazet cpu_to_node(i)); 12799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (!cur) { 12899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn /* not unwinding previous changes */ 12999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn ret = -ENOMEM; 13099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn goto write_unlock; 13199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } 13299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn cur->num_buckets = netdev_flow_limit_table_len; 13399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn rcu_assign_pointer(sd->flow_limit, cur); 13499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } 13599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } 13699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijnwrite_unlock: 13799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn mutex_unlock(&flow_limit_update_mutex); 13899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } else { 1395f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn char kbuf[128]; 1405f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn 14199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (*ppos || !*lenp) { 14299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn *lenp = 0; 14399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn goto done; 14499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } 14599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 14699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn cpumask_clear(mask); 14799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn rcu_read_lock(); 14899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn for_each_possible_cpu(i) { 14999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn sd = &per_cpu(softnet_data, i); 15099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (rcu_dereference(sd->flow_limit)) 15199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn cpumask_set_cpu(i, mask); 15299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } 15399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn rcu_read_unlock(); 15499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 1555f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn len = min(sizeof(kbuf) - 1, *lenp); 1565f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn len = cpumask_scnprintf(kbuf, len, mask); 1575f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn if (!len) { 1585f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn *lenp = 0; 1595f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn goto done; 1605f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn } 1615f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn if (len < *lenp) 1625f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn kbuf[len++] = '\n'; 1635f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn if (copy_to_user(buffer, kbuf, len)) { 1645f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn ret = -EFAULT; 1655f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn goto done; 1665f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn } 1675f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn *lenp = len; 1685f121b9a83b499a61ed44e5ba619c7de8f7271adWillem de Bruijn *ppos += len; 16999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } 17099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 17199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijndone: 17299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn free_cpumask_var(mask); 17399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn return ret; 17499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn} 17599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 176fe2c6338fd2c6f383c4d4164262f35c8f3708e1fJoe Perchesstatic int flow_limit_table_len_sysctl(struct ctl_table *table, int write, 17799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn void __user *buffer, size_t *lenp, 17899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn loff_t *ppos) 17999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn{ 18099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn unsigned int old, *ptr; 18199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn int ret; 18299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 18399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn mutex_lock(&flow_limit_update_mutex); 18499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 18599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn ptr = table->data; 18699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn old = *ptr; 18799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn ret = proc_dointvec(table, write, buffer, lenp, ppos); 18899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn if (!ret && write && !is_power_of_2(*ptr)) { 18999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn *ptr = old; 19099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn ret = -EINVAL; 19199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn } 19299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 19399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn mutex_unlock(&flow_limit_update_mutex); 19499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn return ret; 19599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn} 19699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn#endif /* CONFIG_NET_FLOW_LIMIT */ 19799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn 1986da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger#ifdef CONFIG_NET_SCHED 1996da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemmingerstatic int set_default_qdisc(struct ctl_table *table, int write, 2006da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger void __user *buffer, size_t *lenp, loff_t *ppos) 2016da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger{ 2026da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger char id[IFNAMSIZ]; 2036da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger struct ctl_table tbl = { 2046da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger .data = id, 2056da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger .maxlen = IFNAMSIZ, 2066da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger }; 2076da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger int ret; 2086da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger 2096da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger qdisc_get_default(id, IFNAMSIZ); 2106da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger 2116da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger ret = proc_dostring(&tbl, write, buffer, lenp, ppos); 2126da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger if (write && ret == 0) 2136da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger ret = qdisc_set_default(id); 2146da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger return ret; 2156da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger} 2166da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger#endif 2176da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger 21833eb9cfc700ae9ce621d47d6ca6d6b4ad7cd97f3Pavel Emelyanovstatic struct ctl_table net_core_table[] = { 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_NET 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "wmem_max", 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data = &sysctl_wmem_max, 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 225cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .proc_handler = proc_dointvec_minmax, 226cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .extra1 = &one, 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "rmem_max", 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data = &sysctl_rmem_max, 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 233cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .proc_handler = proc_dointvec_minmax, 234cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .extra1 = &one, 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "wmem_default", 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data = &sysctl_wmem_default, 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 241cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .proc_handler = proc_dointvec_minmax, 242cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .extra1 = &one, 2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "rmem_default", 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data = &sysctl_rmem_default, 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 249cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .proc_handler = proc_dointvec_minmax, 250cdda88912d62f9603d27433338a18be83ef23ac1bingtian.ly@taobao.com .extra1 = &one, 2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "dev_weight", 2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data = &weight_p, 2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 2576d9f239a1edb31d6133230f478fd1dc2da338ec5Alexey Dobriyan .proc_handler = proc_dointvec 2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "netdev_max_backlog", 2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data = &netdev_max_backlog, 2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 2646d9f239a1edb31d6133230f478fd1dc2da338ec5Alexey Dobriyan .proc_handler = proc_dointvec 2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2660a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet#ifdef CONFIG_BPF_JIT 2670a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet { 2680a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet .procname = "bpf_jit_enable", 2690a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet .data = &bpf_jit_enable, 2700a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet .maxlen = sizeof(int), 2710a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet .mode = 0644, 2720a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet .proc_handler = proc_dointvec 2730a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet }, 2740a14842f5a3c0e88a1e59fac5c3025db39721f74Eric Dumazet#endif 2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2763b098e2d7c693796cc4dffb07caa249fc0f70771Eric Dumazet .procname = "netdev_tstamp_prequeue", 2773b098e2d7c693796cc4dffb07caa249fc0f70771Eric Dumazet .data = &netdev_tstamp_prequeue, 2783b098e2d7c693796cc4dffb07caa249fc0f70771Eric Dumazet .maxlen = sizeof(int), 2793b098e2d7c693796cc4dffb07caa249fc0f70771Eric Dumazet .mode = 0644, 2803b098e2d7c693796cc4dffb07caa249fc0f70771Eric Dumazet .proc_handler = proc_dointvec 2813b098e2d7c693796cc4dffb07caa249fc0f70771Eric Dumazet }, 2823b098e2d7c693796cc4dffb07caa249fc0f70771Eric Dumazet { 2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "message_cost", 284717115e1a5856b57af0f71e1df7149108294fc10Dave Young .data = &net_ratelimit_state.interval, 2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 2876d9f239a1edb31d6133230f478fd1dc2da338ec5Alexey Dobriyan .proc_handler = proc_dointvec_jiffies, 2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "message_burst", 291717115e1a5856b57af0f71e1df7149108294fc10Dave Young .data = &net_ratelimit_state.burst, 2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 2946d9f239a1edb31d6133230f478fd1dc2da338ec5Alexey Dobriyan .proc_handler = proc_dointvec, 2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .procname = "optmem_max", 2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data = &sysctl_optmem_max, 2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .maxlen = sizeof(int), 3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .mode = 0644, 3016d9f239a1edb31d6133230f478fd1dc2da338ec5Alexey Dobriyan .proc_handler = proc_dointvec 3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }, 303fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert#ifdef CONFIG_RPS 304fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert { 305fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert .procname = "rps_sock_flow_entries", 306fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert .maxlen = sizeof(int), 307fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert .mode = 0644, 308fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert .proc_handler = rps_sock_flow_sysctl 309fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert }, 310fec5e652e58fa6017b2c9e06466cb2a6538de5b4Tom Herbert#endif 31199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn#ifdef CONFIG_NET_FLOW_LIMIT 31299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn { 31399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .procname = "flow_limit_cpu_bitmap", 31499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .mode = 0644, 31599bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .proc_handler = flow_limit_cpu_sysctl 31699bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn }, 31799bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn { 31899bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .procname = "flow_limit_table_len", 31999bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .data = &netdev_flow_limit_table_len, 32099bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .maxlen = sizeof(int), 32199bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .mode = 0644, 32299bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn .proc_handler = flow_limit_table_len_sysctl 32399bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn }, 32499bbc70741903c063b3ccad90a3e06fc55df9245Willem de Bruijn#endif /* CONFIG_NET_FLOW_LIMIT */ 325e0d1095ae3405404d247afb00233ef837d58da83Cong Wang#ifdef CONFIG_NET_RX_BUSY_POLL 326060212928670593fb89243640bf05cf89560b023Eliezer Tamir { 32764b0dc517ea1b35d02565a779e6cb77ae9045685Eliezer Tamir .procname = "busy_poll", 32864b0dc517ea1b35d02565a779e6cb77ae9045685Eliezer Tamir .data = &sysctl_net_busy_poll, 329eb6db622825b2028df74f490b8c36887cf3c2f50Eliezer Tamir .maxlen = sizeof(unsigned int), 330060212928670593fb89243640bf05cf89560b023Eliezer Tamir .mode = 0644, 331eb6db622825b2028df74f490b8c36887cf3c2f50Eliezer Tamir .proc_handler = proc_dointvec 332060212928670593fb89243640bf05cf89560b023Eliezer Tamir }, 3332d48d67fa8cd129ea85ea02d91b4a793286866f8Eliezer Tamir { 33464b0dc517ea1b35d02565a779e6cb77ae9045685Eliezer Tamir .procname = "busy_read", 33564b0dc517ea1b35d02565a779e6cb77ae9045685Eliezer Tamir .data = &sysctl_net_busy_read, 3362d48d67fa8cd129ea85ea02d91b4a793286866f8Eliezer Tamir .maxlen = sizeof(unsigned int), 3372d48d67fa8cd129ea85ea02d91b4a793286866f8Eliezer Tamir .mode = 0644, 3382d48d67fa8cd129ea85ea02d91b4a793286866f8Eliezer Tamir .proc_handler = proc_dointvec 3392d48d67fa8cd129ea85ea02d91b4a793286866f8Eliezer Tamir }, 3406da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger#endif 3416da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger#ifdef CONFIG_NET_SCHED 3426da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger { 3436da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger .procname = "default_qdisc", 3446da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger .mode = 0644, 3456da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger .maxlen = IFNAMSIZ, 3466da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger .proc_handler = set_default_qdisc 3476da7c8fcbcbdb50ec68c61b40d554c74850fdb91stephen hemminger }, 348060212928670593fb89243640bf05cf89560b023Eliezer Tamir#endif 3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_NET */ 3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { 35151b0bdedb8e784d0d969a6b77151911130812400Stephen Hemminger .procname = "netdev_budget", 35251b0bdedb8e784d0d969a6b77151911130812400Stephen Hemminger .data = &netdev_budget, 35351b0bdedb8e784d0d969a6b77151911130812400Stephen Hemminger .maxlen = sizeof(int), 35451b0bdedb8e784d0d969a6b77151911130812400Stephen Hemminger .mode = 0644, 3556d9f239a1edb31d6133230f478fd1dc2da338ec5Alexey Dobriyan .proc_handler = proc_dointvec 35651b0bdedb8e784d0d969a6b77151911130812400Stephen Hemminger }, 357a2a316fd068c455c609ecc155dcfaa7e208d29feStephen Hemminger { 358a2a316fd068c455c609ecc155dcfaa7e208d29feStephen Hemminger .procname = "warnings", 359a2a316fd068c455c609ecc155dcfaa7e208d29feStephen Hemminger .data = &net_msg_warn, 360a2a316fd068c455c609ecc155dcfaa7e208d29feStephen Hemminger .maxlen = sizeof(int), 361a2a316fd068c455c609ecc155dcfaa7e208d29feStephen Hemminger .mode = 0644, 3626d9f239a1edb31d6133230f478fd1dc2da338ec5Alexey Dobriyan .proc_handler = proc_dointvec 363a2a316fd068c455c609ecc155dcfaa7e208d29feStephen Hemminger }, 364f8572d8f2a2ba75408b97dc24ef47c83671795d7Eric W. Biederman { } 3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 36633eb9cfc700ae9ce621d47d6ca6d6b4ad7cd97f3Pavel Emelyanov 367d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanovstatic struct ctl_table netns_core_table[] = { 368d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov { 369d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov .procname = "somaxconn", 370d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov .data = &init_net.core.sysctl_somaxconn, 371d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov .maxlen = sizeof(int), 372d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov .mode = 0644, 3735f671d6b4ec3e6d66c2a868738af2cdea09e7509Roman Gushchin .extra1 = &zero, 3745f671d6b4ec3e6d66c2a868738af2cdea09e7509Roman Gushchin .extra2 = &ushort_max, 3755f671d6b4ec3e6d66c2a868738af2cdea09e7509Roman Gushchin .proc_handler = proc_dointvec_minmax 376d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov }, 377f8572d8f2a2ba75408b97dc24ef47c83671795d7Eric W. Biederman { } 378d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov}; 379d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov 380024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanovstatic __net_init int sysctl_core_net_init(struct net *net) 38133eb9cfc700ae9ce621d47d6ca6d6b4ad7cd97f3Pavel Emelyanov{ 382d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov struct ctl_table *tbl; 383024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 3848efa6e93cb2666dceafc4844057fdcb9aa324fb7Pavel Emelyanov net->core.sysctl_somaxconn = SOMAXCONN; 385b8e1f9b5c37e77cc8f978a58859b35fe5edd5542Pavel Emelyanov 386d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov tbl = netns_core_table; 38709ad9bc752519cc167d0a573e1acf69b5c707c67Octavian Purdila if (!net_eq(net, &init_net)) { 388d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov tbl = kmemdup(tbl, sizeof(netns_core_table), GFP_KERNEL); 389024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov if (tbl == NULL) 390024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov goto err_dup; 391024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 392d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov tbl[0].data = &net->core.sysctl_somaxconn; 393464dc801c76aa0db88e16e8f5f47c6879858b9b2Eric W. Biederman 394464dc801c76aa0db88e16e8f5f47c6879858b9b2Eric W. Biederman /* Don't export any sysctls to unprivileged users */ 395464dc801c76aa0db88e16e8f5f47c6879858b9b2Eric W. Biederman if (net->user_ns != &init_user_ns) { 396464dc801c76aa0db88e16e8f5f47c6879858b9b2Eric W. Biederman tbl[0].procname = NULL; 397464dc801c76aa0db88e16e8f5f47c6879858b9b2Eric W. Biederman } 398024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov } 399024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 400ec8f23ce0f4005b74013d4d122e0d540397a93c9Eric W. Biederman net->core.sysctl_hdr = register_net_sysctl(net, "net/core", tbl); 4018efa6e93cb2666dceafc4844057fdcb9aa324fb7Pavel Emelyanov if (net->core.sysctl_hdr == NULL) 402024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov goto err_reg; 40333eb9cfc700ae9ce621d47d6ca6d6b4ad7cd97f3Pavel Emelyanov 404024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov return 0; 405024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 406024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanoverr_reg: 407d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov if (tbl != netns_core_table) 408024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov kfree(tbl); 409024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanoverr_dup: 410024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov return -ENOMEM; 411024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov} 412024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 413024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanovstatic __net_exit void sysctl_core_net_exit(struct net *net) 414024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov{ 415024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov struct ctl_table *tbl; 416024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 4178efa6e93cb2666dceafc4844057fdcb9aa324fb7Pavel Emelyanov tbl = net->core.sysctl_hdr->ctl_table_arg; 4188efa6e93cb2666dceafc4844057fdcb9aa324fb7Pavel Emelyanov unregister_net_sysctl_table(net->core.sysctl_hdr); 419d5a4502e9efa534212484fd691339f6469cf95ffPavel Emelyanov BUG_ON(tbl == netns_core_table); 420024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov kfree(tbl); 421024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov} 422024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 423024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanovstatic __net_initdata struct pernet_operations sysctl_core_ops = { 424024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov .init = sysctl_core_net_init, 425024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov .exit = sysctl_core_net_exit, 426024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov}; 427024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov 428024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanovstatic __init int sysctl_core_init(void) 429024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov{ 4304344475797a16ef948385780943f7a5cf09f0675Eric W. Biederman register_net_sysctl(&init_net, "net/core", net_core_table); 431024626e36d75fc8c6e32d50d4c68bfc3b8df5fdfPavel Emelyanov return register_pernet_subsys(&sysctl_core_ops); 43233eb9cfc700ae9ce621d47d6ca6d6b4ad7cd97f3Pavel Emelyanov} 43333eb9cfc700ae9ce621d47d6ca6d6b4ad7cd97f3Pavel Emelyanov 434b27aeadb5948d400df83db4d29590fb9862ba49dAlexey Dobriyanfs_initcall(sysctl_core_init); 435