aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-10-18 06:05:54 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-18 17:37:23 -0400
commitfc6cd25b738c2369d7ed3a6ef2ca248b51fcd2d4 (patch)
treebd3708eac72edf06097a8a2ed72c3a3fea0b0998
parentf429cd37a21b8efc825bdbb22db7f033564cbc98 (diff)
sysctl: Error on bad sysctl tables
After going through the kernels sysctl tables several times it has become clear that code review and testing is just not effective in prevent problematic sysctl tables from being used in the stable kernel. I certainly can't seem to fix the problems as fast as they are introduced. Therefore this patch adds sysctl_check_table which is called when a sysctl table is registered and checks to see if we have a problematic sysctl table. The biggest part of the code is the table of valid binary sysctl entries, but since we have frozen our set of binary sysctls this table should not need to change, and it makes it much easier to detect when someone unintentionally adds a new binary sysctl value. As best as I can determine all of the several hundred errors spewed on boot up now are legitimate. [bunk@kernel.org: kernel/sysctl_check.c must #include <linux/string.h>] Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Alexey Dobriyan <adobriyan@sw.ru> Signed-off-by: Adrian Bunk <bunk@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--include/linux/sysctl.h1
-rw-r--r--kernel/Makefile2
-rw-r--r--kernel/sysctl.c6
-rw-r--r--kernel/sysctl_check.c1556
4 files changed, 1564 insertions, 1 deletions
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index be76464671f0..e99171f01b4c 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -1068,6 +1068,7 @@ struct ctl_table_header
1068struct ctl_table_header *register_sysctl_table(struct ctl_table * table); 1068struct ctl_table_header *register_sysctl_table(struct ctl_table * table);
1069 1069
1070void unregister_sysctl_table(struct ctl_table_header * table); 1070void unregister_sysctl_table(struct ctl_table_header * table);
1071int sysctl_check_table(struct ctl_table *table);
1071 1072
1072#else /* __KERNEL__ */ 1073#else /* __KERNEL__ */
1073 1074
diff --git a/kernel/Makefile b/kernel/Makefile
index 2a999836ca18..d63fbb18798a 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -9,7 +9,7 @@ obj-y = sched.o fork.o exec_domain.o panic.o printk.o profile.o \
9 rcupdate.o extable.o params.o posix-timers.o \ 9 rcupdate.o extable.o params.o posix-timers.o \
10 kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \ 10 kthread.o wait.o kfifo.o sys_ni.o posix-cpu-timers.o mutex.o \
11 hrtimer.o rwsem.o latency.o nsproxy.o srcu.o die_notifier.o \ 11 hrtimer.o rwsem.o latency.o nsproxy.o srcu.o die_notifier.o \
12 utsname.o 12 utsname.o sysctl_check.o
13 13
14obj-$(CONFIG_STACKTRACE) += stacktrace.o 14obj-$(CONFIG_STACKTRACE) += stacktrace.o
15obj-y += time/ 15obj-y += time/
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index c7150af631b5..62e53a0de4a3 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1461,7 +1461,9 @@ static void sysctl_set_parent(struct ctl_table *parent, struct ctl_table *table)
1461 1461
1462static __init int sysctl_init(void) 1462static __init int sysctl_init(void)
1463{ 1463{
1464 int err;
1464 sysctl_set_parent(NULL, root_table); 1465 sysctl_set_parent(NULL, root_table);
1466 err = sysctl_check_table(root_table);
1465 return 0; 1467 return 0;
1466} 1468}
1467 1469
@@ -1546,6 +1548,10 @@ struct ctl_table_header *register_sysctl_table(struct ctl_table * table)
1546 tmp->used = 0; 1548 tmp->used = 0;
1547 tmp->unregistering = NULL; 1549 tmp->unregistering = NULL;
1548 sysctl_set_parent(NULL, table); 1550 sysctl_set_parent(NULL, table);
1551 if (sysctl_check_table(tmp->ctl_table)) {
1552 kfree(tmp);
1553 return NULL;
1554 }
1549 spin_lock(&sysctl_lock); 1555 spin_lock(&sysctl_lock);
1550 list_add_tail(&tmp->ctl_entry, &root_table_header.ctl_entry); 1556 list_add_tail(&tmp->ctl_entry, &root_table_header.ctl_entry);
1551 spin_unlock(&sysctl_lock); 1557 spin_unlock(&sysctl_lock);
diff --git a/kernel/sysctl_check.c b/kernel/sysctl_check.c
new file mode 100644
index 000000000000..8bce52cc06d4
--- /dev/null
+++ b/kernel/sysctl_check.c
@@ -0,0 +1,1556 @@
1#include <linux/stat.h>
2#include <linux/sysctl.h>
3#include "../arch/s390/appldata/appldata.h"
4#include "../fs/xfs/linux-2.6/xfs_sysctl.h"
5#include <linux/sunrpc/debug.h>
6#include <linux/string.h>
7#include <net/ip_vs.h>
8
9struct trans_ctl_table {
10 int ctl_name;
11 const char *procname;
12 struct trans_ctl_table *child;
13};
14
15static struct trans_ctl_table trans_random_table[] = {
16 { RANDOM_POOLSIZE, "poolsize" },
17 { RANDOM_ENTROPY_COUNT, "entropy_avail" },
18 { RANDOM_READ_THRESH, "read_wakeup_threshold" },
19 { RANDOM_WRITE_THRESH, "write_wakeup_threshold" },
20 { RANDOM_BOOT_ID, "boot_id" },
21 { RANDOM_UUID, "uuid" },
22 {}
23};
24
25static struct trans_ctl_table trans_pty_table[] = {
26 { PTY_MAX, "max" },
27 { PTY_NR, "nr" },
28 {}
29};
30
31static struct trans_ctl_table trans_kern_table[] = {
32 { KERN_OSTYPE, "ostype" },
33 { KERN_OSRELEASE, "osrelease" },
34 /* KERN_OSREV not used */
35 { KERN_VERSION, "version" },
36 /* KERN_SECUREMASK not used */
37 /* KERN_PROF not used */
38 { KERN_NODENAME, "hostname" },
39 { KERN_DOMAINNAME, "domainname" },
40
41 { KERN_CAP_BSET, "cap-bound" },
42 { KERN_PANIC, "panic" },
43 { KERN_REALROOTDEV, "real-root-dev" },
44
45 { KERN_SPARC_REBOOT, "reboot-cmd" },
46 { KERN_CTLALTDEL, "ctrl-alt-del" },
47 { KERN_PRINTK, "printk" },
48
49 /* KERN_NAMETRANS not used */
50 /* KERN_PPC_HTABRECLAIM not used */
51 /* KERN_PPC_ZEROPAGED not used */
52 { KERN_PPC_POWERSAVE_NAP, "powersave-nap" },
53
54 { KERN_MODPROBE, "modprobe" },
55 { KERN_SG_BIG_BUFF, "sg-big-buff" },
56 { KERN_ACCT, "acct" },
57 { KERN_PPC_L2CR, "l2cr" },
58
59 /* KERN_RTSIGNR not used */
60 /* KERN_RTSIGMAX not used */
61
62 { KERN_SHMMAX, "shmmax" },
63 { KERN_MSGMAX, "msgmax" },
64 { KERN_MSGMNB, "msgmnb" },
65 /* KERN_MSGPOOL not used*/
66 { KERN_SYSRQ, "sysrq" },
67 { KERN_MAX_THREADS, "threads-max" },
68 { KERN_RANDOM, "random", trans_random_table },
69 { KERN_SHMALL, "shmall" },
70 { KERN_MSGMNI, "msgmni" },
71 { KERN_SEM, "sem" },
72 { KERN_SPARC_STOP_A, "stop-a" },
73 { KERN_SHMMNI, "shmmni" },
74
75 { KERN_OVERFLOWUID, "overflowuid" },
76 { KERN_OVERFLOWGID, "overflowgid" },
77
78 { KERN_HOTPLUG, "hotplug", },
79 { KERN_IEEE_EMULATION_WARNINGS, "ieee_emulation_warnings" },
80
81 { KERN_S390_USER_DEBUG_LOGGING, "userprocess_debug" },
82 { KERN_CORE_USES_PID, "core_uses_pid" },
83 { KERN_TAINTED, "tainted" },
84 { KERN_CADPID, "cad_pid" },
85 { KERN_PIDMAX, "pid_max" },
86 { KERN_CORE_PATTERN, "core_pattern" },
87 { KERN_PANIC_ON_OOPS, "panic_on_oops" },
88 { KERN_HPPA_PWRSW, "soft-power" },
89 { KERN_HPPA_UNALIGNED, "unaligned-trap" },
90
91 { KERN_PRINTK_RATELIMIT, "printk_ratelimit" },
92 { KERN_PRINTK_RATELIMIT_BURST, "printk_ratelimit_burst" },
93
94 { KERN_PTY, "pty", trans_pty_table },
95 { KERN_NGROUPS_MAX, "ngroups_max" },
96 { KERN_SPARC_SCONS_PWROFF, "scons_poweroff" },
97 { KERN_HZ_TIMER, "hz_timer" },
98 { KERN_UNKNOWN_NMI_PANIC, "unknown_nmi_panic" },
99 { KERN_BOOTLOADER_TYPE, "bootloader_type" },
100 { KERN_RANDOMIZE, "randomize_va_space" },
101
102 { KERN_SPIN_RETRY, "spin_retry" },
103 { KERN_ACPI_VIDEO_FLAGS, "acpi_video_flags" },
104 { KERN_IA64_UNALIGNED, "ignore-unaligned-usertrap" },
105 { KERN_COMPAT_LOG, "compat-log" },
106 { KERN_MAX_LOCK_DEPTH, "max_lock_depth" },
107 { KERN_NMI_WATCHDOG, "nmi_watchdog" },
108 { KERN_PANIC_ON_NMI, "panic_on_unrecovered_nmi" },
109 {}
110};
111
112static struct trans_ctl_table trans_vm_table[] = {
113 { VM_OVERCOMMIT_MEMORY, "overcommit_memory" },
114 { VM_PAGE_CLUSTER, "page-cluster" },
115 { VM_DIRTY_BACKGROUND, "dirty_background_ratio" },
116 { VM_DIRTY_RATIO, "dirty_ratio" },
117 { VM_DIRTY_WB_CS, "dirty_writeback_centisecs" },
118 { VM_DIRTY_EXPIRE_CS, "dirty_expire_centisecs" },
119 { VM_NR_PDFLUSH_THREADS, "nr_pdflush_threads" },
120 { VM_OVERCOMMIT_RATIO, "overcommit_ratio" },
121 /* VM_PAGEBUF unused */
122 { VM_HUGETLB_PAGES, "nr_hugepages" },
123 { VM_SWAPPINESS, "swappiness" },
124 { VM_LOWMEM_RESERVE_RATIO, "lowmem_reserve_ratio" },
125 { VM_MIN_FREE_KBYTES, "min_free_kbytes" },
126 { VM_MAX_MAP_COUNT, "max_map_count" },
127 { VM_LAPTOP_MODE, "laptop_mode" },
128 { VM_BLOCK_DUMP, "block_dump" },
129 { VM_HUGETLB_GROUP, "hugetlb_shm_group" },
130 { VM_VFS_CACHE_PRESSURE, "vfs_cache_pressure" },
131 { VM_LEGACY_VA_LAYOUT, "legacy_va_layout" },
132 /* VM_SWAP_TOKEN_TIMEOUT unused */
133 { VM_DROP_PAGECACHE, "drop_caches" },
134 { VM_PERCPU_PAGELIST_FRACTION, "percpu_pagelist_fraction" },
135 { VM_ZONE_RECLAIM_MODE, "zone_reclaim_mode" },
136 { VM_MIN_UNMAPPED, "min_unmapped_ratio" },
137 { VM_PANIC_ON_OOM, "panic_on_oom" },
138 { VM_VDSO_ENABLED, "vdso_enabled" },
139 { VM_MIN_SLAB, "min_slab_ratio" },
140 { VM_CMM_PAGES, "cmm_pages" },
141 { VM_CMM_TIMED_PAGES, "cmm_timed_pages" },
142 { VM_CMM_TIMEOUT, "cmm_timeout" },
143
144 {}
145};
146
147static struct trans_ctl_table trans_net_core_table[] = {
148 { NET_CORE_WMEM_MAX, "wmem_max" },
149 { NET_CORE_RMEM_MAX, "rmem_max" },
150 { NET_CORE_WMEM_DEFAULT, "wmem_default" },
151 { NET_CORE_RMEM_DEFAULT, "rmem_default" },
152 /* NET_CORE_DESTROY_DELAY unused */
153 { NET_CORE_MAX_BACKLOG, "netdev_max_backlog" },
154 /* NET_CORE_FASTROUTE unused */
155 { NET_CORE_MSG_COST, "message_cost" },
156 { NET_CORE_MSG_BURST, "message_burst" },
157 { NET_CORE_OPTMEM_MAX, "optmem_max" },
158 /* NET_CORE_HOT_LIST_LENGTH unused */
159 /* NET_CORE_DIVERT_VERSION unused */
160 /* NET_CORE_NO_CONG_THRESH unused */
161 /* NET_CORE_NO_CONG unused */
162 /* NET_CORE_LO_CONG unused */
163 /* NET_CORE_MOD_CONG unused */
164 { NET_CORE_DEV_WEIGHT, "dev_weight" },
165 { NET_CORE_SOMAXCONN, "somaxconn" },
166 { NET_CORE_BUDGET, "netdev_budget" },
167 { NET_CORE_AEVENT_ETIME, "xfrm_aevent_etime" },
168 { NET_CORE_AEVENT_RSEQTH, "xfrm_aevent_rseqth" },
169 { NET_CORE_WARNINGS, "warnings" },
170 {},
171};
172
173static struct trans_ctl_table trans_net_unix_table[] = {
174 /* NET_UNIX_DESTROY_DELAY unused */
175 /* NET_UNIX_DELETE_DELAY unused */
176 { NET_UNIX_MAX_DGRAM_QLEN, "max_dgram_qlen" },
177 {}
178};
179
180static struct trans_ctl_table trans_net_ipv4_route_table[] = {
181 { NET_IPV4_ROUTE_FLUSH, "flush" },
182 { NET_IPV4_ROUTE_MIN_DELAY, "min_delay" },
183 { NET_IPV4_ROUTE_MAX_DELAY, "max_delay" },
184 { NET_IPV4_ROUTE_GC_THRESH, "gc_thresh" },
185 { NET_IPV4_ROUTE_MAX_SIZE, "max_size" },
186 { NET_IPV4_ROUTE_GC_MIN_INTERVAL, "gc_min_interval" },
187 { NET_IPV4_ROUTE_GC_TIMEOUT, "gc_timeout" },
188 { NET_IPV4_ROUTE_GC_INTERVAL, "gc_interval" },
189 { NET_IPV4_ROUTE_REDIRECT_LOAD, "redirect_load" },
190 { NET_IPV4_ROUTE_REDIRECT_NUMBER, "redirect_number" },
191 { NET_IPV4_ROUTE_REDIRECT_SILENCE, "redirect_silence" },
192 { NET_IPV4_ROUTE_ERROR_COST, "error_cost" },
193 { NET_IPV4_ROUTE_ERROR_BURST, "error_burst" },
194 { NET_IPV4_ROUTE_GC_ELASTICITY, "gc_elasticity" },
195 { NET_IPV4_ROUTE_MTU_EXPIRES, "mtu_expires" },
196 { NET_IPV4_ROUTE_MIN_PMTU, "min_pmtu" },
197 { NET_IPV4_ROUTE_MIN_ADVMSS, "min_adv_mss" },
198 { NET_IPV4_ROUTE_SECRET_INTERVAL, "secret_interval" },
199 { NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS, "gc_min_interval_ms" },
200 {}
201};
202
203static struct trans_ctl_table trans_net_ipv4_conf_vars_table[] = {
204 { NET_IPV4_CONF_FORWARDING, "forwarding" },
205 { NET_IPV4_CONF_MC_FORWARDING, "mc_forwarding" },
206
207 { NET_IPV4_CONF_PROXY_ARP, "proxy_arp" },
208 { NET_IPV4_CONF_ACCEPT_REDIRECTS, "accept_redirects" },
209 { NET_IPV4_CONF_SECURE_REDIRECTS, "secure_redirects" },
210 { NET_IPV4_CONF_SEND_REDIRECTS, "send_redirects" },
211 { NET_IPV4_CONF_SHARED_MEDIA, "shared_media" },
212 { NET_IPV4_CONF_RP_FILTER, "rp_filter" },
213 { NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE, "accept_source_route" },
214 { NET_IPV4_CONF_BOOTP_RELAY, "bootp_relay" },
215 { NET_IPV4_CONF_LOG_MARTIANS, "log_martians" },
216 { NET_IPV4_CONF_TAG, "tag" },
217 { NET_IPV4_CONF_ARPFILTER, "arp_filter" },
218 { NET_IPV4_CONF_MEDIUM_ID, "medium_id" },
219 { NET_IPV4_CONF_NOXFRM, "disable_xfrm" },
220 { NET_IPV4_CONF_NOPOLICY, "disable_policy" },
221 { NET_IPV4_CONF_FORCE_IGMP_VERSION, "force_igmp_version" },
222
223 { NET_IPV4_CONF_ARP_ANNOUNCE, "arp_announce" },
224 { NET_IPV4_CONF_ARP_IGNORE, "arp_ignore" },
225 { NET_IPV4_CONF_PROMOTE_SECONDARIES, "promote_secondaries" },
226 { NET_IPV4_CONF_ARP_ACCEPT, "arp_accept" },
227 {}
228};
229
230static struct trans_ctl_table trans_net_ipv4_conf_table[] = {
231 { NET_PROTO_CONF_ALL, "all", trans_net_ipv4_conf_vars_table },
232 { NET_PROTO_CONF_DEFAULT, "default", trans_net_ipv4_conf_vars_table },
233 { 0, NULL, trans_net_ipv4_conf_vars_table },
234 {}
235};
236
237
238static struct trans_ctl_table trans_net_ipv4_vs_table[] = {
239 { NET_IPV4_VS_AMEMTHRESH, "amemthresh" },
240 { NET_IPV4_VS_DEBUG_LEVEL, "debug_level" },
241 { NET_IPV4_VS_AMDROPRATE, "am_droprate" },
242 { NET_IPV4_VS_DROP_ENTRY, "drop_entry" },
243 { NET_IPV4_VS_DROP_PACKET, "drop_packet" },
244 { NET_IPV4_VS_SECURE_TCP, "secure_tcp" },
245 { NET_IPV4_VS_TO_ES, "timeout_established" },
246 { NET_IPV4_VS_TO_SS, "timeout_synsent" },
247 { NET_IPV4_VS_TO_SR, "timeout_synrecv" },
248 { NET_IPV4_VS_TO_FW, "timeout_finwait" },
249 { NET_IPV4_VS_TO_TW, "timeout_timewait" },
250 { NET_IPV4_VS_TO_CL, "timeout_close" },
251 { NET_IPV4_VS_TO_CW, "timeout_closewait" },
252 { NET_IPV4_VS_TO_LA, "timeout_lastack" },
253 { NET_IPV4_VS_TO_LI, "timeout_listen" },
254 { NET_IPV4_VS_TO_SA, "timeout_synack" },
255 { NET_IPV4_VS_TO_UDP, "timeout_udp" },
256 { NET_IPV4_VS_TO_ICMP, "timeout_icmp" },
257 { NET_IPV4_VS_CACHE_BYPASS, "cache_bypass" },
258 { NET_IPV4_VS_EXPIRE_NODEST_CONN, "expire_nodest_conn" },
259 { NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE, "expire_quiescent_template" },
260 { NET_IPV4_VS_SYNC_THRESHOLD, "sync_threshold" },
261 { NET_IPV4_VS_NAT_ICMP_SEND, "nat_icmp_send" },
262 { NET_IPV4_VS_LBLC_EXPIRE, "lblc_expiration" },
263 { NET_IPV4_VS_LBLCR_EXPIRE, "lblcr_expiration" },
264 {}
265};
266
267static struct trans_ctl_table trans_net_neigh_vars_table[] = {
268 { NET_NEIGH_MCAST_SOLICIT, "mcast_solicit" },
269 { NET_NEIGH_UCAST_SOLICIT, "ucast_solicit" },
270 { NET_NEIGH_APP_SOLICIT, "app_solicit" },
271 { NET_NEIGH_RETRANS_TIME, "retrans_time" },
272 { NET_NEIGH_REACHABLE_TIME, "base_reachable_time" },
273 { NET_NEIGH_DELAY_PROBE_TIME, "delay_first_probe_time" },
274 { NET_NEIGH_GC_STALE_TIME, "gc_stale_time" },
275 { NET_NEIGH_UNRES_QLEN, "unres_qlen" },
276 { NET_NEIGH_PROXY_QLEN, "proxy_qlen" },
277 { NET_NEIGH_ANYCAST_DELAY, "anycast_delay" },
278 { NET_NEIGH_PROXY_DELAY, "proxy_delay" },
279 { NET_NEIGH_LOCKTIME, "locktime" },
280 { NET_NEIGH_GC_INTERVAL, "gc_interval" },
281 { NET_NEIGH_GC_THRESH1, "gc_thresh1" },
282 { NET_NEIGH_GC_THRESH2, "gc_thresh2" },
283 { NET_NEIGH_GC_THRESH3, "gc_thresh3" },
284 { NET_NEIGH_RETRANS_TIME_MS, "retrans_time_ms" },
285 { NET_NEIGH_REACHABLE_TIME_MS, "base_reachable_time_ms" },
286 {}
287};
288
289static struct trans_ctl_table trans_net_neigh_table[] = {
290 { NET_PROTO_CONF_DEFAULT, "default", trans_net_neigh_vars_table },
291 { 0, NULL, trans_net_neigh_vars_table },
292 {}
293};
294
295static struct trans_ctl_table trans_net_ipv4_netfilter_table[] = {
296 { NET_IPV4_NF_CONNTRACK_MAX, "ip_conntrack_max" },
297
298 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT, "ip_conntrack_tcp_timeout_syn_sent" },
299 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV, "ip_conntrack_tcp_timeout_syn_recv" },
300 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED, "ip_conntrack_tcp_timeout_established" },
301 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT, "ip_conntrack_tcp_timeout_fin_wait" },
302 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT, "ip_conntrack_tcp_timeout_close_wait" },
303 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK, "ip_conntrack_tcp_timeout_last_ack" },
304 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT, "ip_conntrack_tcp_timeout_time_wait" },
305 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE, "ip_conntrack_tcp_timeout_close" },
306
307 { NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT, "ip_conntrack_udp_timeout" },
308 { NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM, "ip_conntrack_udp_timeout_stream" },
309 { NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT, "ip_conntrack_icmp_timeout" },
310 { NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT, "ip_conntrack_generic_timeout" },
311
312 { NET_IPV4_NF_CONNTRACK_BUCKETS, "ip_conntrack_buckets" },
313 { NET_IPV4_NF_CONNTRACK_LOG_INVALID, "ip_conntrack_log_invalid" },
314 { NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS, "ip_conntrack_tcp_timeout_max_retrans" },
315 { NET_IPV4_NF_CONNTRACK_TCP_LOOSE, "ip_conntrack_tcp_loose" },
316 { NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL, "ip_conntrack_tcp_be_liberal" },
317 { NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS, "ip_conntrack_tcp_max_retrans" },
318
319 { NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED, "ip_conntrack_sctp_timeout_closed" },
320 { NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT, "ip_conntrack_sctp_timeout_cookie_wait" },
321 { NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED, "ip_conntrack_sctp_timeout_cookie_echoed" },
322 { NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED, "ip_conntrack_sctp_timeout_established" },
323 { NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT, "ip_conntrack_sctp_timeout_shutdown_sent" },
324 { NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD, "ip_conntrack_sctp_timeout_shutdown_recd" },
325 { NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT, "ip_conntrack_sctp_timeout_shutdown_ack_sent" },
326
327 { NET_IPV4_NF_CONNTRACK_COUNT, "ip_conntrack_count" },
328 { NET_IPV4_NF_CONNTRACK_CHECKSUM, "ip_conntrack_checksum" },
329 {}
330};
331
332static struct trans_ctl_table trans_net_ipv4_table[] = {
333 { NET_IPV4_FORWARD, "ip_forward" },
334 { NET_IPV4_DYNADDR, "ip_dynaddr" },
335
336 { NET_IPV4_CONF, "conf", trans_net_ipv4_conf_table },
337 { NET_IPV4_NEIGH, "neigh", trans_net_neigh_table },
338 { NET_IPV4_ROUTE, "route", trans_net_ipv4_route_table },
339 /* NET_IPV4_FIB_HASH unused */
340 { NET_IPV4_NETFILTER, "netfilter", trans_net_ipv4_netfilter_table },
341 { NET_IPV4_VS, "vs", trans_net_ipv4_vs_table },
342
343 { NET_IPV4_TCP_TIMESTAMPS, "tcp_timestamps" },
344 { NET_IPV4_TCP_WINDOW_SCALING, "tcp_window_scaling" },
345 { NET_IPV4_TCP_SACK, "tcp_sack" },
346 { NET_IPV4_TCP_RETRANS_COLLAPSE, "tcp_retrans_collapse" },
347 { NET_IPV4_DEFAULT_TTL, "ip_default_ttl" },
348 /* NET_IPV4_AUTOCONFIG unused */
349 { NET_IPV4_NO_PMTU_DISC, "ip_no_pmtu_disc" },
350 { NET_IPV4_TCP_SYN_RETRIES, "tcp_syn_retries" },
351 { NET_IPV4_IPFRAG_HIGH_THRESH, "ipfrag_high_thresh" },
352 { NET_IPV4_IPFRAG_LOW_THRESH, "ipfrag_low_thresh" },
353 { NET_IPV4_IPFRAG_TIME, "ipfrag_time" },
354 /* NET_IPV4_TCP_MAX_KA_PROBES unused */
355 { NET_IPV4_TCP_KEEPALIVE_TIME, "tcp_keepalive_time" },
356 { NET_IPV4_TCP_KEEPALIVE_PROBES, "tcp_keepalive_probes" },
357 { NET_IPV4_TCP_RETRIES1, "tcp_retries1" },
358 { NET_IPV4_TCP_RETRIES2, "tcp_retries2" },
359 { NET_IPV4_TCP_FIN_TIMEOUT, "tcp_fin_timeout" },
360 /* NET_IPV4_IP_MASQ_DEBUG unused */
361 { NET_TCP_SYNCOOKIES, "tcp_syncookies" },
362 { NET_TCP_STDURG, "tcp_stdurg" },
363 { NET_TCP_RFC1337, "tcp_rfc1337" },
364 /* NET_TCP_SYN_TAILDROP unused */
365 { NET_TCP_MAX_SYN_BACKLOG, "tcp_max_syn_backlog" },
366 { NET_IPV4_LOCAL_PORT_RANGE, "ip_local_port_range" },
367 { NET_IPV4_ICMP_ECHO_IGNORE_ALL, "icmp_echo_ignore_all" },
368 { NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS, "icmp_echo_ignore_broadcasts" },
369 /* NET_IPV4_ICMP_SOURCEQUENCH_RATE unused */
370 /* NET_IPV4_ICMP_DESTUNREACH_RATE unused */
371 /* NET_IPV4_ICMP_TIMEEXCEED_RATE unused */
372 /* NET_IPV4_ICMP_PARAMPROB_RATE unused */
373 /* NET_IPV4_ICMP_ECHOREPLY_RATE unused */
374 { NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES, "icmp_ignore_bogus_error_responses" },
375 { NET_IPV4_IGMP_MAX_MEMBERSHIPS, "igmp_max_memberships" },
376 { NET_TCP_TW_RECYCLE, "tcp_tw_recycle" },
377 /* NET_IPV4_ALWAYS_DEFRAG unused */
378 { NET_IPV4_TCP_KEEPALIVE_INTVL, "tcp_keepalive_intvl" },
379 { NET_IPV4_INET_PEER_THRESHOLD, "inet_peer_threshold" },
380 { NET_IPV4_INET_PEER_MINTTL, "inet_peer_minttl" },
381 { NET_IPV4_INET_PEER_MAXTTL, "inet_peer_maxttl" },
382 { NET_IPV4_INET_PEER_GC_MINTIME, "inet_peer_gc_mintime" },
383 { NET_IPV4_INET_PEER_GC_MAXTIME, "inet_peer_gc_maxtime" },
384 { NET_TCP_ORPHAN_RETRIES, "tcp_orphan_retries" },
385 { NET_TCP_ABORT_ON_OVERFLOW, "tcp_abort_on_overflow" },
386 { NET_TCP_SYNACK_RETRIES, "tcp_synack_retries" },
387 { NET_TCP_MAX_ORPHANS, "tcp_max_orphans" },
388 { NET_TCP_MAX_TW_BUCKETS, "tcp_max_tw_buckets" },
389 { NET_TCP_FACK, "tcp_fack" },
390 { NET_TCP_REORDERING, "tcp_reordering" },
391 { NET_TCP_ECN, "tcp_ecn" },
392 { NET_TCP_DSACK, "tcp_dsack" },
393 { NET_TCP_MEM, "tcp_mem" },
394 { NET_TCP_WMEM, "tcp_wmem" },
395 { NET_TCP_RMEM, "tcp_rmem" },
396 { NET_TCP_APP_WIN, "tcp_app_win" },
397 { NET_TCP_ADV_WIN_SCALE, "tcp_adv_win_scale" },
398 { NET_IPV4_NONLOCAL_BIND, "ip_nonlocal_bind" },
399 { NET_IPV4_ICMP_RATELIMIT, "icmp_ratelimit" },
400 { NET_IPV4_ICMP_RATEMASK, "icmp_ratemask" },
401 { NET_TCP_TW_REUSE, "tcp_tw_reuse" },
402 { NET_TCP_FRTO, "tcp_frto" },
403 { NET_TCP_LOW_LATENCY, "tcp_low_latency" },
404 { NET_IPV4_IPFRAG_SECRET_INTERVAL, "ipfrag_secret_interval" },
405 { NET_IPV4_IGMP_MAX_MSF, "igmp_max_msf" },
406 { NET_TCP_NO_METRICS_SAVE, "tcp_no_metrics_save" },
407 /* NET_TCP_DEFAULT_WIN_SCALE unused */
408 { NET_TCP_MODERATE_RCVBUF, "tcp_moderate_rcvbuf" },
409 { NET_TCP_TSO_WIN_DIVISOR, "tcp_tso_win_divisor" },
410 /* NET_TCP_BIC_BETA unused */
411 { NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR, "icmp_errors_use_inbound_ifaddr" },
412 { NET_TCP_CONG_CONTROL, "tcp_congestion_control" },
413 { NET_TCP_ABC, "tcp_abc" },
414 { NET_IPV4_IPFRAG_MAX_DIST, "ipfrag_max_dist" },
415 { NET_TCP_MTU_PROBING, "tcp_mtu_probing" },
416 { NET_TCP_BASE_MSS, "tcp_base_mss" },
417 { NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS, "tcp_workaround_signed_windows" },
418 { NET_TCP_DMA_COPYBREAK, "tcp_dma_copybreak" },
419 { NET_TCP_SLOW_START_AFTER_IDLE, "tcp_slow_start_after_idle" },
420 { NET_CIPSOV4_CACHE_ENABLE, "cipso_cache_enable" },
421 { NET_CIPSOV4_CACHE_BUCKET_SIZE, "cipso_cache_bucket_size" },
422 { NET_CIPSOV4_RBM_OPTFMT, "cipso_rbm_optfmt" },
423 { NET_CIPSOV4_RBM_STRICTVALID, "cipso_rbm_strictvalid" },
424 { NET_TCP_AVAIL_CONG_CONTROL, "tcp_available_congestion_control" },
425 { NET_TCP_ALLOWED_CONG_CONTROL, "tcp_allowed_congestion_control" },
426 { NET_TCP_MAX_SSTHRESH, "tcp_max_ssthresh" },
427 { NET_TCP_FRTO_RESPONSE, "tcp_frto_response" },
428 { 2088 /* NET_IPQ_QMAX */, "ip_queue_maxlen" },
429 {}
430};
431
432static struct trans_ctl_table trans_net_ipx_table[] = {
433 { NET_IPX_PPROP_BROADCASTING, "ipx_pprop_broadcasting" },
434 /* NET_IPX_FORWARDING unused */
435 {}
436};
437
438static struct trans_ctl_table trans_net_atalk_table[] = {
439 { NET_ATALK_AARP_EXPIRY_TIME, "aarp-expiry-time" },
440 { NET_ATALK_AARP_TICK_TIME, "aarp-tick-time" },
441 { NET_ATALK_AARP_RETRANSMIT_LIMIT, "aarp-retransmit-limit" },
442 { NET_ATALK_AARP_RESOLVE_TIME, "aarp-resolve-time" },
443 {},
444};
445
446static struct trans_ctl_table trans_net_netrom_table[] = {
447 { NET_NETROM_DEFAULT_PATH_QUALITY, "default_path_quality" },
448 { NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER, "obsolescence_count_initialiser" },
449 { NET_NETROM_NETWORK_TTL_INITIALISER, "network_ttl_initialiser" },
450 { NET_NETROM_TRANSPORT_TIMEOUT, "transport_timeout" },
451 { NET_NETROM_TRANSPORT_MAXIMUM_TRIES, "transport_maximum_tries" },
452 { NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY, "transport_acknowledge_delay" },
453 { NET_NETROM_TRANSPORT_BUSY_DELAY, "transport_busy_delay" },
454 { NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE, "transport_requested_window_size" },
455 { NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT, "transport_no_activity_timeout" },
456 { NET_NETROM_ROUTING_CONTROL, "routing_control" },
457 { NET_NETROM_LINK_FAILS_COUNT, "link_fails_count" },
458 { NET_NETROM_RESET, "reset" },
459 {}
460};
461
462static struct trans_ctl_table trans_net_ax25_table[] = {
463 { NET_AX25_IP_DEFAULT_MODE, "ip_default_mode" },
464 { NET_AX25_DEFAULT_MODE, "ax25_default_mode" },
465 { NET_AX25_BACKOFF_TYPE, "backoff_type" },
466 { NET_AX25_CONNECT_MODE, "connect_mode" },
467 { NET_AX25_STANDARD_WINDOW, "standard_window_size" },
468 { NET_AX25_EXTENDED_WINDOW, "extended_window_size" },
469 { NET_AX25_T1_TIMEOUT, "t1_timeout" },
470 { NET_AX25_T2_TIMEOUT, "t2_timeout" },
471 { NET_AX25_T3_TIMEOUT, "t3_timeout" },
472 { NET_AX25_IDLE_TIMEOUT, "idle_timeout" },
473 { NET_AX25_N2, "maximum_retry_count" },
474 { NET_AX25_PACLEN, "maximum_packet_length" },
475 { NET_AX25_PROTOCOL, "protocol" },
476 { NET_AX25_DAMA_SLAVE_TIMEOUT, "dama_slave_timeout" },
477 {}
478};
479
480static struct trans_ctl_table trans_net_bridge_table[] = {
481 { NET_BRIDGE_NF_CALL_ARPTABLES, "bridge-nf-call-arptables" },
482 { NET_BRIDGE_NF_CALL_IPTABLES, "bridge-nf-call-iptables" },
483 { NET_BRIDGE_NF_CALL_IP6TABLES, "bridge-nf-call-ip6tables" },
484 { NET_BRIDGE_NF_FILTER_VLAN_TAGGED, "bridge-nf-filter-vlan-tagged" },
485 { NET_BRIDGE_NF_FILTER_PPPOE_TAGGED, "bridge-nf-filter-pppoe-tagged" },
486 {}
487};
488
489static struct trans_ctl_table trans_net_rose_table[] = {
490 { NET_ROSE_RESTART_REQUEST_TIMEOUT, "restart_request_timeout" },
491 { NET_ROSE_CALL_REQUEST_TIMEOUT, "call_request_timeout" },
492 { NET_ROSE_RESET_REQUEST_TIMEOUT, "reset_request_timeout" },
493 { NET_ROSE_CLEAR_REQUEST_TIMEOUT, "clear_request_timeout" },
494 { NET_ROSE_ACK_HOLD_BACK_TIMEOUT, "acknowledge_hold_back_timeout" },
495 { NET_ROSE_ROUTING_CONTROL, "routing_control" },
496 { NET_ROSE_LINK_FAIL_TIMEOUT, "link_fail_timeout" },
497 { NET_ROSE_MAX_VCS, "maximum_virtual_circuits" },
498 { NET_ROSE_WINDOW_SIZE, "window_size" },
499 { NET_ROSE_NO_ACTIVITY_TIMEOUT, "no_activity_timeout" },
500 {}
501};
502
503static struct trans_ctl_table trans_net_ipv6_conf_var_table[] = {
504 { NET_IPV6_FORWARDING, "forwarding" },
505 { NET_IPV6_HOP_LIMIT, "hop_limit" },
506 { NET_IPV6_MTU, "mtu" },
507 { NET_IPV6_ACCEPT_RA, "accept_ra" },
508 { NET_IPV6_ACCEPT_REDIRECTS, "accept_redirects" },
509 { NET_IPV6_AUTOCONF, "autoconf" },
510 { NET_IPV6_DAD_TRANSMITS, "dad_transmits" },
511 { NET_IPV6_RTR_SOLICITS, "router_solicitations" },
512 { NET_IPV6_RTR_SOLICIT_INTERVAL, "router_solicitation_interval" },
513 { NET_IPV6_RTR_SOLICIT_DELAY, "router_solicitation_delay" },
514 { NET_IPV6_USE_TEMPADDR, "use_tempaddr" },
515 { NET_IPV6_TEMP_VALID_LFT, "temp_valid_lft" },
516 { NET_IPV6_TEMP_PREFERED_LFT, "temp_prefered_lft" },
517 { NET_IPV6_REGEN_MAX_RETRY, "regen_max_retry" },
518 { NET_IPV6_MAX_DESYNC_FACTOR, "max_desync_factor" },
519 { NET_IPV6_MAX_ADDRESSES, "max_addresses" },
520 { NET_IPV6_FORCE_MLD_VERSION, "force_mld_version" },
521 { NET_IPV6_ACCEPT_RA_DEFRTR, "accept_ra_defrtr" },
522 { NET_IPV6_ACCEPT_RA_PINFO, "accept_ra_pinfo" },
523 { NET_IPV6_ACCEPT_RA_RTR_PREF, "accept_ra_rtr_pref" },
524 { NET_IPV6_RTR_PROBE_INTERVAL, "router_probe_interval" },
525 { NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN, "accept_ra_rt_info_max_plen" },
526 { NET_IPV6_PROXY_NDP, "proxy_ndp" },
527 { NET_IPV6_ACCEPT_SOURCE_ROUTE, "accept_source_route" },
528 {}
529};
530
531static struct trans_ctl_table trans_net_ipv6_conf_table[] = {
532 { NET_PROTO_CONF_ALL, "all", trans_net_ipv6_conf_var_table },
533 { NET_PROTO_CONF_DEFAULT, "default", trans_net_ipv6_conf_var_table },
534 { 0, NULL, trans_net_ipv6_conf_var_table },
535 {}
536};
537
538static struct trans_ctl_table trans_net_ipv6_route_table[] = {
539 { NET_IPV6_ROUTE_FLUSH, "flush" },
540 { NET_IPV6_ROUTE_GC_THRESH, "gc_thresh" },
541 { NET_IPV6_ROUTE_MAX_SIZE, "max_size" },
542 { NET_IPV6_ROUTE_GC_MIN_INTERVAL, "gc_min_interval" },
543 { NET_IPV6_ROUTE_GC_TIMEOUT, "gc_timeout" },
544 { NET_IPV6_ROUTE_GC_INTERVAL, "gc_interval" },
545 { NET_IPV6_ROUTE_GC_ELASTICITY, "gc_elasticity" },
546 { NET_IPV6_ROUTE_MTU_EXPIRES, "mtu_expires" },
547 { NET_IPV6_ROUTE_MIN_ADVMSS, "min_adv_mss" },
548 { NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS, "gc_min_interval_ms" },
549 {}
550};
551
552static struct trans_ctl_table trans_net_ipv6_icmp_table[] = {
553 { NET_IPV6_ICMP_RATELIMIT, "ratelimit" },
554 {}
555};
556
557static struct trans_ctl_table trans_net_ipv6_table[] = {
558 { NET_IPV6_CONF, "conf", trans_net_ipv6_conf_table },
559 { NET_IPV6_NEIGH, "neigh", trans_net_neigh_table },
560 { NET_IPV6_ROUTE, "route", trans_net_ipv6_route_table },
561 { NET_IPV6_ICMP, "icmp", trans_net_ipv6_icmp_table },
562 { NET_IPV6_BINDV6ONLY, "bindv6only" },
563 { NET_IPV6_IP6FRAG_HIGH_THRESH, "ip6frag_high_thresh" },
564 { NET_IPV6_IP6FRAG_LOW_THRESH, "ip6frag_low_thresh" },
565 { NET_IPV6_IP6FRAG_TIME, "ip6frag_time" },
566 { NET_IPV6_IP6FRAG_SECRET_INTERVAL, "ip6frag_secret_interval" },
567 { NET_IPV6_MLD_MAX_MSF, "mld_max_msf" },
568 {}
569};
570
571static struct trans_ctl_table trans_net_x25_table[] = {
572 { NET_X25_RESTART_REQUEST_TIMEOUT, "restart_request_timeout" },
573 { NET_X25_CALL_REQUEST_TIMEOUT, "call_request_timeout" },
574 { NET_X25_RESET_REQUEST_TIMEOUT, "reset_request_timeout" },
575 { NET_X25_CLEAR_REQUEST_TIMEOUT, "clear_request_timeout" },
576 { NET_X25_ACK_HOLD_BACK_TIMEOUT, "acknowledgement_hold_back_timeout" },
577 { NET_X25_FORWARD, "x25_forward" },
578 {}
579};
580
581static struct trans_ctl_table trans_net_tr_table[] = {
582 { NET_TR_RIF_TIMEOUT, "rif_timeout" },
583 {}
584};
585
586
587static struct trans_ctl_table trans_net_decnet_conf_vars[] = {
588 { NET_DECNET_CONF_DEV_FORWARDING, "forwarding" },
589 { NET_DECNET_CONF_DEV_PRIORITY, "priority" },
590 { NET_DECNET_CONF_DEV_T2, "t2" },
591 { NET_DECNET_CONF_DEV_T3, "t3" },
592 {}
593};
594
595static struct trans_ctl_table trans_net_decnet_conf[] = {
596 { 0, NULL, trans_net_decnet_conf_vars },
597 {}
598};
599
600static struct trans_ctl_table trans_net_decnet_table[] = {
601 { NET_DECNET_CONF, "conf", trans_net_decnet_conf },
602 { NET_DECNET_NODE_ADDRESS, "node_address" },
603 { NET_DECNET_NODE_NAME, "node_name" },
604 { NET_DECNET_DEFAULT_DEVICE, "default_device" },
605 { NET_DECNET_TIME_WAIT, "time_wait" },
606 { NET_DECNET_DN_COUNT, "dn_count" },
607 { NET_DECNET_DI_COUNT, "di_count" },
608 { NET_DECNET_DR_COUNT, "dr_count" },
609 { NET_DECNET_DST_GC_INTERVAL, "dst_gc_interval" },
610 { NET_DECNET_NO_FC_MAX_CWND, "no_fc_max_cwnd" },
611 { NET_DECNET_MEM, "decnet_mem" },
612 { NET_DECNET_RMEM, "decnet_rmem" },
613 { NET_DECNET_WMEM, "decnet_wmem" },
614 { NET_DECNET_DEBUG_LEVEL, "debug" },
615 {}
616};
617
618static struct trans_ctl_table trans_net_sctp_table[] = {
619 { NET_SCTP_RTO_INITIAL, "rto_initial" },
620 { NET_SCTP_RTO_MIN, "rto_min" },
621 { NET_SCTP_RTO_MAX, "rto_max" },
622 { NET_SCTP_RTO_ALPHA, "rto_alpha_exp_divisor" },
623 { NET_SCTP_RTO_BETA, "rto_beta_exp_divisor" },
624 { NET_SCTP_VALID_COOKIE_LIFE, "valid_cookie_life" },
625 { NET_SCTP_ASSOCIATION_MAX_RETRANS, "association_max_retrans" },
626 { NET_SCTP_PATH_MAX_RETRANS, "path_max_retrans" },
627 { NET_SCTP_MAX_INIT_RETRANSMITS, "max_init_retransmits" },
628 { NET_SCTP_HB_INTERVAL, "hb_interval" },
629 { NET_SCTP_PRESERVE_ENABLE, "cookie_preserve_enable" },
630 { NET_SCTP_MAX_BURST, "max_burst" },
631 { NET_SCTP_ADDIP_ENABLE, "addip_enable" },
632 { NET_SCTP_PRSCTP_ENABLE, "prsctp_enable" },
633 { NET_SCTP_SNDBUF_POLICY, "sndbuf_policy" },
634 { NET_SCTP_SACK_TIMEOUT, "sack_timeout" },
635 { NET_SCTP_RCVBUF_POLICY, "rcvbuf_policy" },
636 {}
637};
638
639static struct trans_ctl_table trans_net_llc_llc2_timeout_table[] = {
640 { NET_LLC2_ACK_TIMEOUT, "ack" },
641 { NET_LLC2_P_TIMEOUT, "p" },
642 { NET_LLC2_REJ_TIMEOUT, "rej" },
643 { NET_LLC2_BUSY_TIMEOUT, "busy" },
644 {}
645};
646
647static struct trans_ctl_table trans_net_llc_station_table[] = {
648 { NET_LLC_STATION_ACK_TIMEOUT, "ack_timeout" },
649 {}
650};
651
652static struct trans_ctl_table trans_net_llc_llc2_table[] = {
653 { NET_LLC2, "timeout", trans_net_llc_llc2_timeout_table },
654 {}
655};
656
657static struct trans_ctl_table trans_net_llc_table[] = {
658 { NET_LLC2, "llc2", trans_net_llc_llc2_table },
659 { NET_LLC_STATION, "station", trans_net_llc_station_table },
660 {}
661};
662
663static struct trans_ctl_table trans_net_netfilter_table[] = {
664 { NET_NF_CONNTRACK_MAX, "nf_conntrack_max" },
665 { NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT, "nf_conntrack_tcp_timeout_syn_sent" },
666 { NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV, "nf_conntrack_tcp_timeout_syn_recv" },
667 { NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED, "nf_conntrack_tcp_timeout_established" },
668 { NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT, "nf_conntrack_tcp_timeout_fin_wait" },
669 { NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT, "nf_conntrack_tcp_timeout_close_wait" },
670 { NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK, "nf_conntrack_tcp_timeout_last_ack" },
671 { NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT, "nf_conntrack_tcp_timeout_time_wait" },
672 { NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE, "nf_conntrack_tcp_timeout_close" },
673 { NET_NF_CONNTRACK_UDP_TIMEOUT, "nf_conntrack_udp_timeout" },
674 { NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM, "nf_conntrack_udp_timeout_stream" },
675 { NET_NF_CONNTRACK_ICMP_TIMEOUT, "nf_conntrack_icmp_timeout" },
676 { NET_NF_CONNTRACK_GENERIC_TIMEOUT, "nf_conntrack_generic_timeout" },
677 { NET_NF_CONNTRACK_BUCKETS, "nf_conntrack_buckets" },
678 { NET_NF_CONNTRACK_LOG_INVALID, "nf_conntrack_log_invalid" },
679 { NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS, "nf_conntrack_tcp_timeout_max_retrans" },
680 { NET_NF_CONNTRACK_TCP_LOOSE, "nf_conntrack_tcp_loose" },
681 { NET_NF_CONNTRACK_TCP_BE_LIBERAL, "nf_conntrack_tcp_be_liberal" },
682 { NET_NF_CONNTRACK_TCP_MAX_RETRANS, "nf_conntrack_tcp_max_retrans" },
683 { NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED, "nf_conntrack_sctp_timeout_closed" },
684 { NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT, "nf_conntrack_sctp_timeout_cookie_wait" },
685 { NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED, "nf_conntrack_sctp_timeout_cookie_echoed" },
686 { NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED, "nf_conntrack_sctp_timeout_established" },
687 { NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT, "nf_conntrack_sctp_timeout_shutdown_sent" },
688 { NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD, "nf_conntrack_sctp_timeout_shutdown_recd" },
689 { NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT, "nf_conntrack_sctp_timeout_shutdown_ack_sent" },
690 { NET_NF_CONNTRACK_COUNT, "nf_conntrack_count" },
691 { NET_NF_CONNTRACK_ICMPV6_TIMEOUT, "nf_conntrack_icmpv6_timeout" },
692 { NET_NF_CONNTRACK_FRAG6_TIMEOUT, "nf_conntrack_frag6_timeout" },
693 { NET_NF_CONNTRACK_FRAG6_LOW_THRESH, "nf_conntrack_frag6_low_thresh" },
694 { NET_NF_CONNTRACK_FRAG6_HIGH_THRESH, "nf_conntrack_frag6_high_thresh" },
695 { NET_NF_CONNTRACK_CHECKSUM, "nf_conntrack_checksum" },
696
697 {}
698};
699
700static struct trans_ctl_table trans_net_dccp_table[] = {
701 { NET_DCCP_DEFAULT, "default" },
702 {}
703};
704
705static struct trans_ctl_table trans_net_table[] = {
706 { NET_CORE, "core", trans_net_core_table },
707 /* NET_ETHER not used */
708 /* NET_802 not used */
709 { NET_UNIX, "unix", trans_net_unix_table },
710 { NET_IPV4, "ipv4", trans_net_ipv4_table },
711 { NET_IPX, "ipx", trans_net_ipx_table },
712 { NET_ATALK, "atalk", trans_net_atalk_table },
713 { NET_NETROM, "netrom", trans_net_netrom_table },
714 { NET_AX25, "ax25", trans_net_ax25_table },
715 { NET_BRIDGE, "bridge", trans_net_bridge_table },
716 { NET_ROSE, "rose", trans_net_rose_table },
717 { NET_IPV6, "ipv6", trans_net_ipv6_table },
718 { NET_X25, "x25", trans_net_x25_table },
719 { NET_TR, "tr", trans_net_tr_table },
720 { NET_DECNET, "decnet", trans_net_decnet_table },
721 /* NET_ECONET not used */
722 { NET_SCTP, "sctp", trans_net_sctp_table },
723 { NET_LLC, "llc", trans_net_llc_table },
724 { NET_NETFILTER, "netfilter", trans_net_netfilter_table },
725 { NET_DCCP, "dccp", trans_net_dccp_table },
726 {}
727};
728
729static struct trans_ctl_table trans_fs_quota_table[] = {
730 { FS_DQ_LOOKUPS, "lookups" },
731 { FS_DQ_DROPS, "drops" },
732 { FS_DQ_READS, "reads" },
733 { FS_DQ_WRITES, "writes" },
734 { FS_DQ_CACHE_HITS, "cache_hits" },
735 { FS_DQ_ALLOCATED, "allocated_dquots" },
736 { FS_DQ_FREE, "free_dquots" },
737 { FS_DQ_SYNCS, "syncs" },
738 { FS_DQ_WARNINGS, "warnings" },
739 {}
740};
741
742static struct trans_ctl_table trans_fs_xfs_table[] = {
743 { XFS_RESTRICT_CHOWN, "restrict_chown" },
744 { XFS_SGID_INHERIT, "irix_sgid_inherit" },
745 { XFS_SYMLINK_MODE, "irix_symlink_mode" },
746 { XFS_PANIC_MASK, "panic_mask" },
747
748 { XFS_ERRLEVEL, "error_level" },
749 { XFS_SYNCD_TIMER, "xfssyncd_centisecs" },
750 { XFS_INHERIT_SYNC, "inherit_sync" },
751 { XFS_INHERIT_NODUMP, "inherit_nodump" },
752 { XFS_INHERIT_NOATIME, "inherit_noatime" },
753 { XFS_BUF_TIMER, "xfsbufd_centisecs" },
754 { XFS_BUF_AGE, "age_buffer_centisecs" },
755 { XFS_INHERIT_NOSYM, "inherit_nosymlinks" },
756 { XFS_ROTORSTEP, "rotorstep" },
757 { XFS_INHERIT_NODFRG, "inherit_nodefrag" },
758 { XFS_FILESTREAM_TIMER, "filestream_centisecs" },
759 { XFS_STATS_CLEAR, "stats_clear" },
760 {}
761};
762
763static struct trans_ctl_table trans_fs_ocfs2_nm_table[] = {
764 { 1, "hb_ctl_path" },
765 {}
766};
767
768static struct trans_ctl_table trans_fs_ocfs2_table[] = {
769 { 1, "nm", trans_fs_ocfs2_nm_table },
770 {}
771};
772
773static struct trans_ctl_table trans_inotify_table[] = {
774 { INOTIFY_MAX_USER_INSTANCES, "max_user_instances" },
775 { INOTIFY_MAX_USER_WATCHES, "max_user_watches" },
776 { INOTIFY_MAX_QUEUED_EVENTS, "max_queued_events" },
777 {}
778};
779
780static struct trans_ctl_table trans_fs_table[] = {
781 { FS_NRINODE, "inode-nr" },
782 { FS_STATINODE, "inode-state" },
783 /* FS_MAXINODE unused */
784 /* FS_NRDQUOT unused */
785 /* FS_MAXDQUOT unused */
786 { FS_NRFILE, "file-nr" },
787 { FS_MAXFILE, "file-max" },
788 { FS_DENTRY, "dentry-state" },
789 /* FS_NRSUPER unused */
790 /* FS_MAXUPSER unused */
791 { FS_OVERFLOWUID, "overflowuid" },
792 { FS_OVERFLOWGID, "overflowgid" },
793 { FS_LEASES, "leases-enable" },
794 { FS_DIR_NOTIFY, "dir-notify-enable" },
795 { FS_LEASE_TIME, "lease-break-time" },
796 { FS_DQSTATS, "quota", trans_fs_quota_table },
797 { FS_XFS, "xfs", trans_fs_xfs_table },
798 { FS_AIO_NR, "aio-nr" },
799 { FS_AIO_MAX_NR, "aio-max-nr" },
800 { FS_INOTIFY, "inotify", trans_inotify_table },
801 { FS_OCFS2, "ocfs2", trans_fs_ocfs2_table },
802 { KERN_SETUID_DUMPABLE, "suid_dumpable" },
803 {}
804};
805
806static struct trans_ctl_table trans_debug_table[] = {
807 {}
808};
809
810static struct trans_ctl_table trans_cdrom_table[] = {
811 { DEV_CDROM_INFO, "info" },
812 { DEV_CDROM_AUTOCLOSE, "autoclose" },
813 { DEV_CDROM_AUTOEJECT, "autoeject" },
814 { DEV_CDROM_DEBUG, "debug" },
815 { DEV_CDROM_LOCK, "lock" },
816 { DEV_CDROM_CHECK_MEDIA, "check_media" },
817 {}
818};
819
820static struct trans_ctl_table trans_ipmi_table[] = {
821 { DEV_IPMI_POWEROFF_POWERCYCLE, "poweroff_powercycle" },
822 {}
823};
824
825static struct trans_ctl_table trans_mac_hid_files[] = {
826 /* DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES unused */
827 /* DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES unused */
828 { DEV_MAC_HID_MOUSE_BUTTON_EMULATION, "mouse_button_emulation" },
829 { DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE, "mouse_button2_keycode" },
830 { DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE, "mouse_button3_keycode" },
831 /* DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES unused */
832 {}
833};
834
835static struct trans_ctl_table trans_raid_table[] = {
836 { DEV_RAID_SPEED_LIMIT_MIN, "speed_limit_min" },
837 { DEV_RAID_SPEED_LIMIT_MAX, "speed_limit_max" },
838 {}
839};
840
841static struct trans_ctl_table trans_scsi_table[] = {
842 { DEV_SCSI_LOGGING_LEVEL, "logging_level" },
843 {}
844};
845
846static struct trans_ctl_table trans_parport_default_table[] = {
847 { DEV_PARPORT_DEFAULT_TIMESLICE, "timeslice" },
848 { DEV_PARPORT_DEFAULT_SPINTIME, "spintime" },
849 {}
850};
851
852static struct trans_ctl_table trans_parport_device_table[] = {
853 { DEV_PARPORT_DEVICE_TIMESLICE, "timeslice" },
854 {}
855};
856
857static struct trans_ctl_table trans_parport_devices_table[] = {
858 { DEV_PARPORT_DEVICES_ACTIVE, "active" },
859 { 0, NULL, trans_parport_device_table },
860 {}
861};
862
863static struct trans_ctl_table trans_parport_parport_table[] = {
864 { DEV_PARPORT_SPINTIME, "spintime" },
865 { DEV_PARPORT_BASE_ADDR, "base-addr" },
866 { DEV_PARPORT_IRQ, "irq" },
867 { DEV_PARPORT_DMA, "dma" },
868 { DEV_PARPORT_MODES, "modes" },
869 { DEV_PARPORT_DEVICES, "devices", trans_parport_devices_table },
870 { DEV_PARPORT_AUTOPROBE, "autoprobe" },
871 { DEV_PARPORT_AUTOPROBE + 1, "autoprobe0" },
872 { DEV_PARPORT_AUTOPROBE + 2, "autoprobe1" },
873 { DEV_PARPORT_AUTOPROBE + 3, "autoprobe2" },
874 { DEV_PARPORT_AUTOPROBE + 4, "autoprobe3" },
875 {}
876};
877static struct trans_ctl_table trans_parport_table[] = {
878 { DEV_PARPORT_DEFAULT, "default", trans_parport_default_table },
879 { 0, NULL, trans_parport_parport_table },
880 {}
881};
882
883static struct trans_ctl_table trans_dev_table[] = {
884 { DEV_CDROM, "cdrom", trans_cdrom_table },
885 /* DEV_HWMON unused */
886 { DEV_PARPORT, "parport", trans_parport_table },
887 { DEV_RAID, "raid", trans_raid_table },
888 { DEV_MAC_HID, "mac_hid", trans_mac_hid_files },
889 { DEV_SCSI, "scsi", trans_scsi_table },
890 { DEV_IPMI, "ipmi", trans_ipmi_table },
891 {}
892};
893
894static struct trans_ctl_table trans_bus_isa_table[] = {
895 { BUS_ISA_MEM_BASE, "membase" },
896 { BUS_ISA_PORT_BASE, "portbase" },
897 { BUS_ISA_PORT_SHIFT, "portshift" },
898 {}
899};
900
901static struct trans_ctl_table trans_bus_table[] = {
902 { CTL_BUS_ISA, "isa", trans_bus_isa_table },
903 {}
904};
905
906static struct trans_ctl_table trans_arlan_conf_table0[] = {
907 { 1, "spreadingCode" },
908 { 2, "channelNumber" },
909 { 3, "scramblingDisable" },
910 { 4, "txAttenuation" },
911 { 5, "systemId" },
912 { 6, "maxDatagramSize" },
913 { 7, "maxFrameSize" },
914 { 8, "maxRetries" },
915 { 9, "receiveMode" },
916 { 10, "priority" },
917 { 11, "rootOrRepeater" },
918 { 12, "SID" },
919 { 13, "registrationMode" },
920 { 14, "registrationFill" },
921 { 15, "localTalkAddress" },
922 { 16, "codeFormat" },
923 { 17, "numChannels" },
924 { 18, "channel1" },
925 { 19, "channel2" },
926 { 20, "channel3" },
927 { 21, "channel4" },
928 { 22, "txClear" },
929 { 23, "txRetries" },
930 { 24, "txRouting" },
931 { 25, "txScrambled" },
932 { 26, "rxParameter" },
933 { 27, "txTimeoutMs" },
934 { 28, "waitCardTimeout" },
935 { 29, "channelSet" },
936 { 30, "name" },
937 { 31, "waitTime" },
938 { 32, "lParameter" },
939 { 33, "_15" },
940 { 34, "headerSize" },
941 { 36, "tx_delay_ms" },
942 { 37, "retries" },
943 { 38, "ReTransmitPacketMaxSize" },
944 { 39, "waitReTransmitPacketMaxSize" },
945 { 40, "fastReTransCount" },
946 { 41, "driverRetransmissions" },
947 { 42, "txAckTimeoutMs" },
948 { 43, "registrationInterrupts" },
949 { 44, "hardwareType" },
950 { 45, "radioType" },
951 { 46, "writeEEPROM" },
952 { 47, "writeRadioType" },
953 { 48, "entry_exit_debug" },
954 { 49, "debug" },
955 { 50, "in_speed" },
956 { 51, "out_speed" },
957 { 52, "in_speed10" },
958 { 53, "out_speed10" },
959 { 54, "in_speed_max" },
960 { 55, "out_speed_max" },
961 { 56, "measure_rate" },
962 { 57, "pre_Command_Wait" },
963 { 58, "rx_tweak1" },
964 { 59, "rx_tweak2" },
965 { 60, "tx_queue_len" },
966
967 { 150, "arlan0-txRing" },
968 { 151, "arlan0-rxRing" },
969 { 152, "arlan0-18" },
970 { 153, "arlan0-ring" },
971 { 154, "arlan0-shm-cpy" },
972 { 155, "config0" },
973 { 156, "reset0" },
974 {}
975};
976
977static struct trans_ctl_table trans_arlan_conf_table1[] = {
978 { 1, "spreadingCode" },
979 { 2, "channelNumber" },
980 { 3, "scramblingDisable" },
981 { 4, "txAttenuation" },
982 { 5, "systemId" },
983 { 6, "maxDatagramSize" },
984 { 7, "maxFrameSize" },
985 { 8, "maxRetries" },
986 { 9, "receiveMode" },
987 { 10, "priority" },
988 { 11, "rootOrRepeater" },
989 { 12, "SID" },
990 { 13, "registrationMode" },
991 { 14, "registrationFill" },
992 { 15, "localTalkAddress" },
993 { 16, "codeFormat" },
994 { 17, "numChannels" },
995 { 18, "channel1" },
996 { 19, "channel2" },
997 { 20, "channel3" },
998 { 21, "channel4" },
999 { 22, "txClear" },
1000 { 23, "txRetries" },
1001 { 24, "txRouting" },
1002 { 25, "txScrambled" },
1003 { 26, "rxParameter" },
1004 { 27, "txTimeoutMs" },
1005 { 28, "waitCardTimeout" },
1006 { 29, "channelSet" },
1007 { 30, "name" },
1008 { 31, "waitTime" },
1009 { 32, "lParameter" },
1010 { 33, "_15" },
1011 { 34, "headerSize" },
1012 { 36, "tx_delay_ms" },
1013 { 37, "retries" },
1014 { 38, "ReTransmitPacketMaxSize" },
1015 { 39, "waitReTransmitPacketMaxSize" },
1016 { 40, "fastReTransCount" },
1017 { 41, "driverRetransmissions" },
1018 { 42, "txAckTimeoutMs" },
1019 { 43, "registrationInterrupts" },
1020 { 44, "hardwareType" },
1021 { 45, "radioType" },
1022 { 46, "writeEEPROM" },
1023 { 47, "writeRadioType" },
1024 { 48, "entry_exit_debug" },
1025 { 49, "debug" },
1026 { 50, "in_speed" },
1027 { 51, "out_speed" },
1028 { 52, "in_speed10" },
1029 { 53, "out_speed10" },
1030 { 54, "in_speed_max" },
1031 { 55, "out_speed_max" },
1032 { 56, "measure_rate" },
1033 { 57, "pre_Command_Wait" },
1034 { 58, "rx_tweak1" },
1035 { 59, "rx_tweak2" },
1036 { 60, "tx_queue_len" },
1037
1038 { 150, "arlan1-txRing" },
1039 { 151, "arlan1-rxRing" },
1040 { 152, "arlan1-18" },
1041 { 153, "arlan1-ring" },
1042 { 154, "arlan1-shm-cpy" },
1043 { 155, "config1" },
1044 { 156, "reset1" },
1045 {}
1046};
1047
1048static struct trans_ctl_table trans_arlan_conf_table2[] = {
1049 { 1, "spreadingCode" },
1050 { 2, "channelNumber" },
1051 { 3, "scramblingDisable" },
1052 { 4, "txAttenuation" },
1053 { 5, "systemId" },
1054 { 6, "maxDatagramSize" },
1055 { 7, "maxFrameSize" },
1056 { 8, "maxRetries" },
1057 { 9, "receiveMode" },
1058 { 10, "priority" },
1059 { 11, "rootOrRepeater" },
1060 { 12, "SID" },
1061 { 13, "registrationMode" },
1062 { 14, "registrationFill" },
1063 { 15, "localTalkAddress" },
1064 { 16, "codeFormat" },
1065 { 17, "numChannels" },
1066 { 18, "channel1" },
1067 { 19, "channel2" },
1068 { 20, "channel3" },
1069 { 21, "channel4" },
1070 { 22, "txClear" },
1071 { 23, "txRetries" },
1072 { 24, "txRouting" },
1073 { 25, "txScrambled" },
1074 { 26, "rxParameter" },
1075 { 27, "txTimeoutMs" },
1076 { 28, "waitCardTimeout" },
1077 { 29, "channelSet" },
1078 { 30, "name" },
1079 { 31, "waitTime" },
1080 { 32, "lParameter" },
1081 { 33, "_15" },
1082 { 34, "headerSize" },
1083 { 36, "tx_delay_ms" },
1084 { 37, "retries" },
1085 { 38, "ReTransmitPacketMaxSize" },
1086 { 39, "waitReTransmitPacketMaxSize" },
1087 { 40, "fastReTransCount" },
1088 { 41, "driverRetransmissions" },
1089 { 42, "txAckTimeoutMs" },
1090 { 43, "registrationInterrupts" },
1091 { 44, "hardwareType" },
1092 { 45, "radioType" },
1093 { 46, "writeEEPROM" },
1094 { 47, "writeRadioType" },
1095 { 48, "entry_exit_debug" },
1096 { 49, "debug" },
1097 { 50, "in_speed" },
1098 { 51, "out_speed" },
1099 { 52, "in_speed10" },
1100 { 53, "out_speed10" },
1101 { 54, "in_speed_max" },
1102 { 55, "out_speed_max" },
1103 { 56, "measure_rate" },
1104 { 57, "pre_Command_Wait" },
1105 { 58, "rx_tweak1" },
1106 { 59, "rx_tweak2" },
1107 { 60, "tx_queue_len" },
1108
1109 { 150, "arlan2-txRing" },
1110 { 151, "arlan2-rxRing" },
1111 { 152, "arlan2-18" },
1112 { 153, "arlan2-ring" },
1113 { 154, "arlan2-shm-cpy" },
1114 { 155, "config2" },
1115 { 156, "reset2" },
1116 {}
1117};
1118
1119static struct trans_ctl_table trans_arlan_conf_table3[] = {
1120 { 1, "spreadingCode" },
1121 { 2, "channelNumber" },
1122 { 3, "scramblingDisable" },
1123 { 4, "txAttenuation" },
1124 { 5, "systemId" },
1125 { 6, "maxDatagramSize" },
1126 { 7, "maxFrameSize" },
1127 { 8, "maxRetries" },
1128 { 9, "receiveMode" },
1129 { 10, "priority" },
1130 { 11, "rootOrRepeater" },
1131 { 12, "SID" },
1132 { 13, "registrationMode" },
1133 { 14, "registrationFill" },
1134 { 15, "localTalkAddress" },
1135 { 16, "codeFormat" },
1136 { 17, "numChannels" },
1137 { 18, "channel1" },
1138 { 19, "channel2" },
1139 { 20, "channel3" },
1140 { 21, "channel4" },
1141 { 22, "txClear" },
1142 { 23, "txRetries" },
1143 { 24, "txRouting" },
1144 { 25, "txScrambled" },
1145 { 26, "rxParameter" },
1146 { 27, "txTimeoutMs" },
1147 { 28, "waitCardTimeout" },
1148 { 29, "channelSet" },
1149 { 30, "name" },
1150 { 31, "waitTime" },
1151 { 32, "lParameter" },
1152 { 33, "_15" },
1153 { 34, "headerSize" },
1154 { 36, "tx_delay_ms" },
1155 { 37, "retries" },
1156 { 38, "ReTransmitPacketMaxSize" },
1157 { 39, "waitReTransmitPacketMaxSize" },
1158 { 40, "fastReTransCount" },
1159 { 41, "driverRetransmissions" },
1160 { 42, "txAckTimeoutMs" },
1161 { 43, "registrationInterrupts" },
1162 { 44, "hardwareType" },
1163 { 45, "radioType" },
1164 { 46, "writeEEPROM" },
1165 { 47, "writeRadioType" },
1166 { 48, "entry_exit_debug" },
1167 { 49, "debug" },
1168 { 50, "in_speed" },
1169 { 51, "out_speed" },
1170 { 52, "in_speed10" },
1171 { 53, "out_speed10" },
1172 { 54, "in_speed_max" },
1173 { 55, "out_speed_max" },
1174 { 56, "measure_rate" },
1175 { 57, "pre_Command_Wait" },
1176 { 58, "rx_tweak1" },
1177 { 59, "rx_tweak2" },
1178 { 60, "tx_queue_len" },
1179
1180 { 150, "arlan3-txRing" },
1181 { 151, "arlan3-rxRing" },
1182 { 152, "arlan3-18" },
1183 { 153, "arlan3-ring" },
1184 { 154, "arlan3-shm-cpy" },
1185 { 155, "config3" },
1186 { 156, "reset3" },
1187 {}
1188};
1189
1190static struct trans_ctl_table trans_arlan_table[] = {
1191 { 1, "arlan0", trans_arlan_conf_table0 },
1192 { 2, "arlan1", trans_arlan_conf_table1 },
1193 { 3, "arlan2", trans_arlan_conf_table2 },
1194 { 4, "arlan3", trans_arlan_conf_table3 },
1195 {}
1196};
1197
1198static struct trans_ctl_table trans_appldata_table[] = {
1199 { CTL_APPLDATA_TIMER, "timer" },
1200 { CTL_APPLDATA_INTERVAL, "interval" },
1201 { CTL_APPLDATA_OS, "os" },
1202 { CTL_APPLDATA_NET_SUM, "net_sum" },
1203 { CTL_APPLDATA_MEM, "mem" },
1204 {}
1205
1206};
1207
1208static struct trans_ctl_table trans_s390dbf_table[] = {
1209 { 5678 /* CTL_S390DBF_STOPPABLE */, "debug_stoppable" },
1210 { 5679 /* CTL_S390DBF_ACTIVE */, "debug_active" },
1211 {}
1212};
1213
1214static struct trans_ctl_table trans_sunrpc_table[] = {
1215 { CTL_RPCDEBUG, "rpc_debug" },
1216 { CTL_NFSDEBUG, "nfs_debug" },
1217 { CTL_NFSDDEBUG, "nfsd_debug" },
1218 { CTL_NLMDEBUG, "nlm_debug" },
1219 { CTL_SLOTTABLE_UDP, "udp_slot_table_entries" },
1220 { CTL_SLOTTABLE_TCP, "tcp_slot_table_entries" },
1221 { CTL_MIN_RESVPORT, "min_resvport" },
1222 { CTL_MAX_RESVPORT, "max_resvport" },
1223 {}
1224};
1225
1226static struct trans_ctl_table trans_pm_table[] = {
1227 { 1 /* CTL_PM_SUSPEND */, "suspend" },
1228 { 2 /* CTL_PM_CMODE */, "cmode" },
1229 { 3 /* CTL_PM_P0 */, "p0" },
1230 { 4 /* CTL_PM_CM */, "cm" },
1231 {}
1232};
1233
1234static struct trans_ctl_table trans_frv_table[] = {
1235 { 1, "cache-mode" },
1236 { 2, "pin-cxnr" },
1237 {}
1238};
1239
1240static struct trans_ctl_table trans_root_table[] = {
1241 { CTL_KERN, "kernel", trans_kern_table },
1242 { CTL_VM, "vm", trans_vm_table },
1243 { CTL_NET, "net", trans_net_table },
1244 /* CTL_PROC not used */
1245 { CTL_FS, "fs", trans_fs_table },
1246 { CTL_DEBUG, "debug", trans_debug_table },
1247 { CTL_DEV, "dev", trans_dev_table },
1248 { CTL_BUS, "bus", trans_bus_table },
1249 { CTL_ABI, "abi" },
1250 /* CTL_CPU not used */
1251 { CTL_ARLAN, "arlan", trans_arlan_table },
1252 { CTL_APPLDATA, "appldata", trans_appldata_table },
1253 { CTL_S390DBF, "s390dbf", trans_s390dbf_table },
1254 { CTL_SUNRPC, "sunrpc", trans_sunrpc_table },
1255 { CTL_PM, "pm", trans_pm_table },
1256 { CTL_FRV, "frv", trans_frv_table },
1257 {}
1258};
1259
1260
1261
1262
1263static int sysctl_depth(struct ctl_table *table)
1264{
1265 struct ctl_table *tmp;
1266 int depth;
1267
1268 depth = 0;
1269 for (tmp = table; tmp->parent; tmp = tmp->parent)
1270 depth++;
1271
1272 return depth;
1273}
1274
1275static struct ctl_table *sysctl_parent(struct ctl_table *table, int n)
1276{
1277 int i;
1278
1279 for (i = 0; table && i < n; i++)
1280 table = table->parent;
1281
1282 return table;
1283}
1284
1285static struct trans_ctl_table *sysctl_binary_lookup(struct ctl_table *table)
1286{
1287 struct ctl_table *test;
1288 struct trans_ctl_table *ref;
1289 int depth, cur_depth;
1290
1291 depth = sysctl_depth(table);
1292
1293 cur_depth = depth;
1294 ref = trans_root_table;
1295repeat:
1296 test = sysctl_parent(table, cur_depth);
1297 for (; ref->ctl_name || ref->procname || ref->child; ref++) {
1298 int match = 0;
1299
1300 if (cur_depth && !ref->child)
1301 continue;
1302
1303 if (test->procname && ref->procname &&
1304 (strcmp(test->procname, ref->procname) == 0))
1305 match++;
1306
1307 if (test->ctl_name && ref->ctl_name &&
1308 (test->ctl_name == ref->ctl_name))
1309 match++;
1310
1311 if (!ref->ctl_name && !ref->procname)
1312 match++;
1313
1314 if (match) {
1315 if (cur_depth != 0) {
1316 cur_depth--;
1317 ref = ref->child;
1318 goto repeat;
1319 }
1320 goto out;
1321 }
1322 }
1323 ref = NULL;
1324out:
1325 return ref;
1326}
1327
1328static void sysctl_print_path(struct ctl_table *table)
1329{
1330 struct ctl_table *tmp;
1331 int depth, i;
1332 depth = sysctl_depth(table);
1333 if (table->procname) {
1334 for (i = depth; i >= 0; i--) {
1335 tmp = sysctl_parent(table, i);
1336 printk("/%s", tmp->procname?tmp->procname:"");
1337 }
1338 }
1339 printk(" ");
1340 if (table->ctl_name) {
1341 for (i = depth; i >= 0; i--) {
1342 tmp = sysctl_parent(table, i);
1343 printk(".%d", tmp->ctl_name);
1344 }
1345 }
1346}
1347
1348static void sysctl_repair_table(struct ctl_table *table)
1349{
1350 /* Don't complain about the classic default
1351 * sysctl strategy routine. Maybe later we
1352 * can get the tables fixed and complain about
1353 * this.
1354 */
1355 if (table->ctl_name && table->procname &&
1356 (table->proc_handler == proc_dointvec) &&
1357 (!table->strategy)) {
1358 table->strategy = sysctl_data;
1359 }
1360}
1361
1362static struct ctl_table *sysctl_check_lookup(struct ctl_table *table)
1363{
1364 struct ctl_table_header *head;
1365 struct ctl_table *ref, *test;
1366 int depth, cur_depth;
1367
1368 depth = sysctl_depth(table);
1369
1370 for (head = sysctl_head_next(NULL); head;
1371 head = sysctl_head_next(head)) {
1372 cur_depth = depth;
1373 ref = head->ctl_table;
1374repeat:
1375 test = sysctl_parent(table, cur_depth);
1376 for (; ref->ctl_name || ref->procname; ref++) {
1377 int match = 0;
1378 if (cur_depth && !ref->child)
1379 continue;
1380
1381 if (test->procname && ref->procname &&
1382 (strcmp(test->procname, ref->procname) == 0))
1383 match++;
1384
1385 if (test->ctl_name && ref->ctl_name &&
1386 (test->ctl_name == ref->ctl_name))
1387 match++;
1388
1389 if (match) {
1390 if (cur_depth != 0) {
1391 cur_depth--;
1392 ref = ref->child;
1393 goto repeat;
1394 }
1395 goto out;
1396 }
1397 }
1398 }
1399 ref = NULL;
1400out:
1401 sysctl_head_finish(head);
1402 return ref;
1403}
1404
1405static void set_fail(const char **fail, struct ctl_table *table, const char *str)
1406{
1407 if (*fail) {
1408 printk(KERN_ERR "sysctl table check failed: ");
1409 sysctl_print_path(table);
1410 printk(" %s\n", *fail);
1411 }
1412 *fail = str;
1413}
1414
1415static int sysctl_check_dir(struct ctl_table *table)
1416{
1417 struct ctl_table *ref;
1418 int error;
1419
1420 error = 0;
1421 ref = sysctl_check_lookup(table);
1422 if (ref) {
1423 int match = 0;
1424 if (table->procname && ref->procname &&
1425 (strcmp(table->procname, ref->procname) == 0))
1426 match++;
1427
1428 if (table->ctl_name && ref->ctl_name &&
1429 (table->ctl_name == ref->ctl_name))
1430 match++;
1431
1432 if (match != 2) {
1433 printk(KERN_ERR "%s: failed: ", __func__);
1434 sysctl_print_path(table);
1435 printk(" ref: ");
1436 sysctl_print_path(ref);
1437 printk("\n");
1438 error = -EINVAL;
1439 }
1440 }
1441 return error;
1442}
1443
1444static void sysctl_check_leaf(struct ctl_table *table, const char **fail)
1445{
1446 struct ctl_table *ref;
1447
1448 ref = sysctl_check_lookup(table);
1449 if (ref && (ref != table))
1450 set_fail(fail, table, "Sysctl already exists");
1451}
1452
1453static void sysctl_check_bin_path(struct ctl_table *table, const char **fail)
1454{
1455 struct trans_ctl_table *ref;
1456
1457 ref = sysctl_binary_lookup(table);
1458 if (table->ctl_name && !ref)
1459 set_fail(fail, table, "Unknown sysctl binary path");
1460 if (ref) {
1461 if (ref->procname &&
1462 (!table->procname ||
1463 (strcmp(table->procname, ref->procname) != 0)))
1464 set_fail(fail, table, "procname does not match binary path procname");
1465
1466 if (ref->ctl_name &&
1467 (!table->ctl_name || table->ctl_name != ref->ctl_name))
1468 set_fail(fail, table, "ctl_name does not match binary path ctl_name");
1469 }
1470}
1471
1472int sysctl_check_table(struct ctl_table *table)
1473{
1474 int error = 0;
1475 for (; table->ctl_name || table->procname; table++) {
1476 const char *fail = NULL;
1477
1478 sysctl_repair_table(table);
1479 if (table->parent) {
1480 if (table->procname && !table->parent->procname)
1481 set_fail(&fail, table, "Parent without procname");
1482 if (table->ctl_name && !table->parent->ctl_name)
1483 set_fail(&fail, table, "Parent without ctl_name");
1484 }
1485 if (!table->procname)
1486 set_fail(&fail, table, "No procname");
1487 if (table->child) {
1488 if (table->data)
1489 set_fail(&fail, table, "Directory with data?");
1490 if (table->maxlen)
1491 set_fail(&fail, table, "Directory with maxlen?");
1492 if ((table->mode & (S_IRUGO|S_IXUGO)) != table->mode)
1493 set_fail(&fail, table, "Writable sysctl directory");
1494 if (table->proc_handler)
1495 set_fail(&fail, table, "Directory with proc_handler");
1496 if (table->strategy)
1497 set_fail(&fail, table, "Directory with strategy");
1498 if (table->extra1)
1499 set_fail(&fail, table, "Directory with extra1");
1500 if (table->extra2)
1501 set_fail(&fail, table, "Directory with extra2");
1502 if (sysctl_check_dir(table))
1503 set_fail(&fail, table, "Inconsistent directory");
1504 } else {
1505 if ((table->strategy == sysctl_data) ||
1506 (table->strategy == sysctl_string) ||
1507 (table->strategy == sysctl_intvec) ||
1508 (table->strategy == sysctl_jiffies) ||
1509 (table->strategy == sysctl_ms_jiffies) ||
1510 (table->proc_handler == proc_dostring) ||
1511 (table->proc_handler == proc_dointvec) ||
1512 (table->proc_handler == proc_dointvec_bset) ||
1513 (table->proc_handler == proc_dointvec_minmax) ||
1514 (table->proc_handler == proc_dointvec_jiffies) ||
1515 (table->proc_handler == proc_dointvec_userhz_jiffies) ||
1516 (table->proc_handler == proc_dointvec_ms_jiffies) ||
1517 (table->proc_handler == proc_doulongvec_minmax) ||
1518 (table->proc_handler == proc_doulongvec_ms_jiffies_minmax)) {
1519 if (!table->data)
1520 set_fail(&fail, table, "No data");
1521 if (!table->maxlen)
1522 set_fail(&fail, table, "No maxlen");
1523 }
1524 if ((table->strategy == sysctl_intvec) ||
1525 (table->proc_handler == proc_dointvec_minmax) ||
1526 (table->proc_handler == proc_doulongvec_minmax) ||
1527 (table->proc_handler == proc_doulongvec_ms_jiffies_minmax)) {
1528 if (!table->extra1)
1529 set_fail(&fail, table, "No min");
1530 if (!table->extra2)
1531 set_fail(&fail, table, "No max");
1532 }
1533 if (table->ctl_name && !table->strategy)
1534 set_fail(&fail, table, "Missing strategy");
1535#if 0
1536 if (!table->ctl_name && table->strategy)
1537 set_fail(&fail, table, "Strategy without ctl_name");
1538#endif
1539 if (table->procname && !table->proc_handler)
1540 set_fail(&fail, table, "No proc_handler");
1541#if 0
1542 if (!table->procname && table->proc_handler)
1543 set_fail(&fail, table, "proc_handler without procname");
1544#endif
1545 sysctl_check_leaf(table, &fail);
1546 }
1547 sysctl_check_bin_path(table, &fail);
1548 if (fail) {
1549 set_fail(&fail, table, NULL);
1550 error = -EINVAL;
1551 }
1552 if (table->child)
1553 error |= sysctl_check_table(table->child);
1554 }
1555 return error;
1556}