1afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/stat.h>
2afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/sysctl.h>
3c59d87c460767bc35dafd490139d3cfe78fb8da4Christoph Hellwig#include "../fs/xfs/xfs_sysctl.h"
4afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/sunrpc/debug.h>
5afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/string.h>
6afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/syscalls.h>
7afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/namei.h>
8afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/mount.h>
9afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/fs.h>
10afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/nsproxy.h>
11afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/pid_namespace.h>
12afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/file.h>
13afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#include <linux/ctype.h>
1463395b65972c07edce595c9cc8a983016738cdacEric W. Biederman#include <linux/netdevice.h>
1569e4469a39b67e9923731d5d77d45c04837d5defAndy Shevchenko#include <linux/kernel.h>
165a0e3ad6af8660be21ca98a971cd00f331318c05Tejun Heo#include <linux/slab.h>
17c5ddd2024a87353f73068732cfd38d3dfec22e87Al Viro#include <linux/compat.h>
18afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
19afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#ifdef CONFIG_SYSCTL_SYSCALL
20afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
2126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstruct bin_table;
2226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermantypedef ssize_t bin_convert_t(struct file *file,
2326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen);
2426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
2526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic bin_convert_t bin_dir;
2626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic bin_convert_t bin_string;
2726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic bin_convert_t bin_intvec;
2826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic bin_convert_t bin_ulongvec;
2926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic bin_convert_t bin_uuid;
3026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic bin_convert_t bin_dn_node_address;
3126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
3226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman#define CTL_DIR   bin_dir
3326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman#define CTL_STR   bin_string
3426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman#define CTL_INT   bin_intvec
3526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman#define CTL_ULONG bin_ulongvec
3626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman#define CTL_UUID  bin_uuid
3726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman#define CTL_DNADR bin_dn_node_address
3826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
3926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman#define BUFSZ 256
4026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
4126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstruct bin_table {
4226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	bin_convert_t		*convert;
4326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	int			ctl_name;
4426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	const char		*procname;
4526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	const struct bin_table	*child;
4626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
4726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
4826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_random_table[] = {
4926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	RANDOM_POOLSIZE,	"poolsize" },
5026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	RANDOM_ENTROPY_COUNT,	"entropy_avail" },
5126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	RANDOM_READ_THRESH,	"read_wakeup_threshold" },
5226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	RANDOM_WRITE_THRESH,	"write_wakeup_threshold" },
5326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_UUID,	RANDOM_BOOT_ID,		"boot_id" },
5426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_UUID,	RANDOM_UUID,		"uuid" },
5526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
5626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
5726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
5826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_pty_table[] = {
5926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	PTY_MAX,	"max" },
6026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	PTY_NR,		"nr" },
6126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
6226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
6326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
6426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_kern_table[] = {
6526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_OSTYPE,			"ostype" },
6626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_OSRELEASE,			"osrelease" },
6726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_OSREV not used */
6826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_VERSION,			"version" },
6926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_SECUREMASK not used */
7026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_PROF not used */
7126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_NODENAME,			"hostname" },
7226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_DOMAINNAME,		"domainname" },
7326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
7426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PANIC,			"panic" },
7526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_REALROOTDEV,		"real-root-dev" },
7626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
7726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_SPARC_REBOOT,		"reboot-cmd" },
7826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_CTLALTDEL,			"ctrl-alt-del" },
7926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PRINTK,			"printk" },
8026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
8126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_NAMETRANS not used */
8226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_PPC_HTABRECLAIM not used */
8326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_PPC_ZEROPAGED not used */
8426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PPC_POWERSAVE_NAP,		"powersave-nap" },
8526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
8626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_MODPROBE,			"modprobe" },
8726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SG_BIG_BUFF,		"sg-big-buff" },
8826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_ACCT,			"acct" },
8926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_PPC_L2CR "l2cr" no longer used */
9026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
9126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_RTSIGNR not used */
9226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_RTSIGMAX not used */
9326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
9426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_ULONG,	KERN_SHMMAX,			"shmmax" },
9526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_MSGMAX,			"msgmax" },
9626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_MSGMNB,			"msgmnb" },
9726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_MSGPOOL not used*/
9826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SYSRQ,			"sysrq" },
9926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_MAX_THREADS,		"threads-max" },
10026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	KERN_RANDOM,			"random",	bin_random_table },
10126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_ULONG,	KERN_SHMALL,			"shmall" },
10226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_MSGMNI,			"msgmni" },
10326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SEM,			"sem" },
10426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SPARC_STOP_A,		"stop-a" },
10526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SHMMNI,			"shmmni" },
10626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
10726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_OVERFLOWUID,		"overflowuid" },
10826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_OVERFLOWGID,		"overflowgid" },
10926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
11026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_HOTPLUG,			"hotplug", },
11126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_IEEE_EMULATION_WARNINGS,	"ieee_emulation_warnings" },
11226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
11326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_S390_USER_DEBUG_LOGGING,	"userprocess_debug" },
11426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_CORE_USES_PID,		"core_uses_pid" },
11526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_TAINTED "tainted" no longer used */
11626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_CADPID,			"cad_pid" },
11726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PIDMAX,			"pid_max" },
11826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	KERN_CORE_PATTERN,		"core_pattern" },
11926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PANIC_ON_OOPS,		"panic_on_oops" },
12026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_HPPA_PWRSW,		"soft-power" },
12126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_HPPA_UNALIGNED,		"unaligned-trap" },
12226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
12326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PRINTK_RATELIMIT,		"printk_ratelimit" },
12426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PRINTK_RATELIMIT_BURST,	"printk_ratelimit_burst" },
12526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
12626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	KERN_PTY,			"pty",		bin_pty_table },
12726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_NGROUPS_MAX,		"ngroups_max" },
12826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SPARC_SCONS_PWROFF,	"scons-poweroff" },
12926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_HZ_TIMER "hz_timer" no longer used */
13026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_UNKNOWN_NMI_PANIC,		"unknown_nmi_panic" },
13126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_BOOTLOADER_TYPE,		"bootloader_type" },
13226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_RANDOMIZE,			"randomize_va_space" },
13326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
13426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SPIN_RETRY,		"spin_retry" },
13526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* KERN_ACPI_VIDEO_FLAGS "acpi_video_flags" no longer used */
13626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_IA64_UNALIGNED,		"ignore-unaligned-usertrap" },
13726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_COMPAT_LOG,		"compat-log" },
13826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_MAX_LOCK_DEPTH,		"max_lock_depth" },
13926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_PANIC_ON_NMI,		"panic_on_unrecovered_nmi" },
14026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
14126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
14226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
14326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_vm_table[] = {
14426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_OVERCOMMIT_MEMORY,		"overcommit_memory" },
14526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_PAGE_CLUSTER,		"page-cluster" },
14626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_DIRTY_BACKGROUND,		"dirty_background_ratio" },
14726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_DIRTY_RATIO,			"dirty_ratio" },
14826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* VM_DIRTY_WB_CS "dirty_writeback_centisecs" no longer used */
14926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* VM_DIRTY_EXPIRE_CS "dirty_expire_centisecs" no longer used */
1503965c9ae47d64aadf6f13b6fcd37767b83c0689aWanpeng Li	/* VM_NR_PDFLUSH_THREADS "nr_pdflush_threads" no longer used */
15126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_OVERCOMMIT_RATIO,		"overcommit_ratio" },
15226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* VM_PAGEBUF unused */
15326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* VM_HUGETLB_PAGES "nr_hugepages" no longer used */
15426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_SWAPPINESS,			"swappiness" },
15526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_LOWMEM_RESERVE_RATIO,	"lowmem_reserve_ratio" },
15626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_MIN_FREE_KBYTES,		"min_free_kbytes" },
15726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_MAX_MAP_COUNT,		"max_map_count" },
15826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_LAPTOP_MODE,			"laptop_mode" },
15926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_BLOCK_DUMP,			"block_dump" },
16026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_HUGETLB_GROUP,		"hugetlb_shm_group" },
16126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_VFS_CACHE_PRESSURE,	"vfs_cache_pressure" },
16226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_LEGACY_VA_LAYOUT,		"legacy_va_layout" },
16326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* VM_SWAP_TOKEN_TIMEOUT unused */
16426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_DROP_PAGECACHE,		"drop_caches" },
16526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_PERCPU_PAGELIST_FRACTION,	"percpu_pagelist_fraction" },
16626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_ZONE_RECLAIM_MODE,		"zone_reclaim_mode" },
16726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_MIN_UNMAPPED,		"min_unmapped_ratio" },
16826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_PANIC_ON_OOM,		"panic_on_oom" },
16926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_VDSO_ENABLED,		"vdso_enabled" },
17026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	VM_MIN_SLAB,			"min_slab_ratio" },
17126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
17226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
17326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
17426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
17526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_core_table[] = {
17626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_WMEM_MAX,	"wmem_max" },
17726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_RMEM_MAX,	"rmem_max" },
17826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_WMEM_DEFAULT,	"wmem_default" },
17926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_RMEM_DEFAULT,	"rmem_default" },
18026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_DESTROY_DELAY unused */
18126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_MAX_BACKLOG,	"netdev_max_backlog" },
18226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_FASTROUTE unused */
18326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_MSG_COST,	"message_cost" },
18426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_MSG_BURST,	"message_burst" },
18526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_OPTMEM_MAX,	"optmem_max" },
18626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_HOT_LIST_LENGTH unused */
18726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_DIVERT_VERSION unused */
18826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_NO_CONG_THRESH unused */
18926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_NO_CONG unused */
19026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_LO_CONG unused */
19126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_CORE_MOD_CONG unused */
19226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_DEV_WEIGHT,	"dev_weight" },
19326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_SOMAXCONN,	"somaxconn" },
19426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_BUDGET,	"netdev_budget" },
19526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_AEVENT_ETIME,	"xfrm_aevent_etime" },
19626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_AEVENT_RSEQTH,	"xfrm_aevent_rseqth" },
19726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CORE_WARNINGS,	"warnings" },
19826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{},
19926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
20026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
20126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_unix_table[] = {
20226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_UNIX_DESTROY_DELAY unused */
20326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_UNIX_DELETE_DELAY unused */
20426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_UNIX_MAX_DGRAM_QLEN,	"max_dgram_qlen" },
20526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
20626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
20726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
20826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv4_route_table[] = {
20926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_FLUSH,			"flush" },
21026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ROUTE_MIN_DELAY "min_delay" no longer used */
21126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ROUTE_MAX_DELAY "max_delay" no longer used */
21226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_GC_THRESH,		"gc_thresh" },
21326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_MAX_SIZE,		"max_size" },
21426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_GC_MIN_INTERVAL,		"gc_min_interval" },
21526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS,	"gc_min_interval_ms" },
21626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_GC_TIMEOUT,		"gc_timeout" },
217349d2895cc8b7db1f5be677cd685209a3805d2edVasily Averin	/* NET_IPV4_ROUTE_GC_INTERVAL "gc_interval" no longer used */
21826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_REDIRECT_LOAD,		"redirect_load" },
21926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_REDIRECT_NUMBER,		"redirect_number" },
22026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_REDIRECT_SILENCE,	"redirect_silence" },
22126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_ERROR_COST,		"error_cost" },
22226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_ERROR_BURST,		"error_burst" },
22326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_GC_ELASTICITY,		"gc_elasticity" },
22426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_MTU_EXPIRES,		"mtu_expires" },
22526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_MIN_PMTU,		"min_pmtu" },
22626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ROUTE_MIN_ADVMSS,		"min_adv_mss" },
22726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
22826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
22926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
23026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv4_conf_vars_table[] = {
23126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_FORWARDING,		"forwarding" },
23226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_MC_FORWARDING,		"mc_forwarding" },
23326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
23426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_ACCEPT_REDIRECTS,		"accept_redirects" },
23526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_SECURE_REDIRECTS,		"secure_redirects" },
23626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_SEND_REDIRECTS,		"send_redirects" },
23726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_SHARED_MEDIA,		"shared_media" },
23826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_RP_FILTER,		"rp_filter" },
23926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE,	"accept_source_route" },
24026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_PROXY_ARP,		"proxy_arp" },
24126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_MEDIUM_ID,		"medium_id" },
24226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_BOOTP_RELAY,		"bootp_relay" },
24326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_LOG_MARTIANS,		"log_martians" },
24426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_TAG,			"tag" },
24526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_ARPFILTER,		"arp_filter" },
24626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_ARP_ANNOUNCE,		"arp_announce" },
24726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_ARP_IGNORE,		"arp_ignore" },
24826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_ARP_ACCEPT,		"arp_accept" },
24926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_ARP_NOTIFY,		"arp_notify" },
25026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
25126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_NOXFRM,			"disable_xfrm" },
25226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_NOPOLICY,			"disable_policy" },
25326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_FORCE_IGMP_VERSION,	"force_igmp_version" },
25426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_CONF_PROMOTE_SECONDARIES,	"promote_secondaries" },
25526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
25626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
25726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
25826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv4_conf_table[] = {
25926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_PROTO_CONF_ALL,	"all",		bin_net_ipv4_conf_vars_table },
26026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_PROTO_CONF_DEFAULT,	"default",	bin_net_ipv4_conf_vars_table },
26126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	0, NULL, bin_net_ipv4_conf_vars_table },
26226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
26326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
26426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
26526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_neigh_vars_table[] = {
26626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_MCAST_SOLICIT,	"mcast_solicit" },
26726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_UCAST_SOLICIT,	"ucast_solicit" },
26826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_APP_SOLICIT,		"app_solicit" },
26926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NEIGH_RETRANS_TIME "retrans_time" no longer used */
27026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_REACHABLE_TIME,	"base_reachable_time" },
27126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_DELAY_PROBE_TIME,	"delay_first_probe_time" },
27226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_GC_STALE_TIME,	"gc_stale_time" },
27326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_UNRES_QLEN,		"unres_qlen" },
27426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_PROXY_QLEN,		"proxy_qlen" },
27526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NEIGH_ANYCAST_DELAY "anycast_delay" no longer used */
27626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NEIGH_PROXY_DELAY "proxy_delay" no longer used */
27726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NEIGH_LOCKTIME "locktime" no longer used */
27826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_GC_INTERVAL,		"gc_interval" },
27926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_GC_THRESH1,		"gc_thresh1" },
28026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_GC_THRESH2,		"gc_thresh2" },
28126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_GC_THRESH3,		"gc_thresh3" },
28226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_RETRANS_TIME_MS,	"retrans_time_ms" },
28326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NEIGH_REACHABLE_TIME_MS,	"base_reachable_time_ms" },
28426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
28526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
28626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
28726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_neigh_table[] = {
28826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_PROTO_CONF_DEFAULT, "default", bin_net_neigh_vars_table },
28926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	0, NULL, bin_net_neigh_vars_table },
29026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
29126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
29226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
29326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv4_netfilter_table[] = {
29426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_MAX,		"ip_conntrack_max" },
29526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
29626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT "ip_conntrack_tcp_timeout_syn_sent" no longer used */
29726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV "ip_conntrack_tcp_timeout_syn_recv" no longer used */
29826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED "ip_conntrack_tcp_timeout_established" no longer used */
29926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT "ip_conntrack_tcp_timeout_fin_wait" no longer used */
30026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT	"ip_conntrack_tcp_timeout_close_wait" no longer used */
30126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK "ip_conntrack_tcp_timeout_last_ack" no longer used */
30226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT "ip_conntrack_tcp_timeout_time_wait" no longer used */
30326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE "ip_conntrack_tcp_timeout_close" no longer used */
30426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
30526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT "ip_conntrack_udp_timeout" no longer used */
30626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM "ip_conntrack_udp_timeout_stream" no longer used */
30726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT "ip_conntrack_icmp_timeout" no longer used */
30826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT "ip_conntrack_generic_timeout" no longer used */
30926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
31026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_BUCKETS,		"ip_conntrack_buckets" },
31126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_LOG_INVALID,	"ip_conntrack_log_invalid" },
31226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS "ip_conntrack_tcp_timeout_max_retrans" no longer used */
31326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_TCP_LOOSE,	"ip_conntrack_tcp_loose" },
31426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL,	"ip_conntrack_tcp_be_liberal" },
31526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS,	"ip_conntrack_tcp_max_retrans" },
31626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
31726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED "ip_conntrack_sctp_timeout_closed" no longer used */
31826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT "ip_conntrack_sctp_timeout_cookie_wait" no longer used */
31926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED "ip_conntrack_sctp_timeout_cookie_echoed" no longer used */
32026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED "ip_conntrack_sctp_timeout_established" no longer used */
32126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT "ip_conntrack_sctp_timeout_shutdown_sent" no longer used */
32226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD "ip_conntrack_sctp_timeout_shutdown_recd" no longer used */
32326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT "ip_conntrack_sctp_timeout_shutdown_ack_sent" no longer used */
32426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
32526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_COUNT,		"ip_conntrack_count" },
32626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NF_CONNTRACK_CHECKSUM,		"ip_conntrack_checksum" },
32726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
32826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
32926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
33026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv4_table[] = {
33126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{CTL_INT,	NET_IPV4_FORWARD,			"ip_forward" },
33226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
33326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV4_CONF,		"conf",		bin_net_ipv4_conf_table },
33426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV4_NEIGH,		"neigh",	bin_net_neigh_table },
33526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV4_ROUTE,		"route",	bin_net_ipv4_route_table },
33626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_FIB_HASH unused */
33726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV4_NETFILTER,	"netfilter",	bin_net_ipv4_netfilter_table },
33826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
33926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_TIMESTAMPS,		"tcp_timestamps" },
34026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_WINDOW_SCALING,		"tcp_window_scaling" },
34126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_SACK,			"tcp_sack" },
34226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_RETRANS_COLLAPSE,		"tcp_retrans_collapse" },
34326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_DEFAULT_TTL,			"ip_default_ttl" },
34426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_AUTOCONFIG unused */
34526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NO_PMTU_DISC,			"ip_no_pmtu_disc" },
34626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_NONLOCAL_BIND,			"ip_nonlocal_bind" },
34726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_SYN_RETRIES,		"tcp_syn_retries" },
34826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_SYNACK_RETRIES,			"tcp_synack_retries" },
34926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_MAX_ORPHANS,			"tcp_max_orphans" },
35026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_MAX_TW_BUCKETS,			"tcp_max_tw_buckets" },
35126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_DYNADDR,			"ip_dynaddr" },
35226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_KEEPALIVE_TIME,		"tcp_keepalive_time" },
35326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_KEEPALIVE_PROBES,		"tcp_keepalive_probes" },
35426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_KEEPALIVE_INTVL,		"tcp_keepalive_intvl" },
35526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_RETRIES1,			"tcp_retries1" },
35626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_RETRIES2,			"tcp_retries2" },
35726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_FIN_TIMEOUT,		"tcp_fin_timeout" },
35826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_SYNCOOKIES,			"tcp_syncookies" },
35926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_TW_RECYCLE,			"tcp_tw_recycle" },
36026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_ABORT_ON_OVERFLOW,		"tcp_abort_on_overflow" },
36126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_STDURG,				"tcp_stdurg" },
36226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_RFC1337,			"tcp_rfc1337" },
36326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_MAX_SYN_BACKLOG,		"tcp_max_syn_backlog" },
36426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_LOCAL_PORT_RANGE,		"ip_local_port_range" },
36526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_IGMP_MAX_MEMBERSHIPS,		"igmp_max_memberships" },
36626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_IGMP_MAX_MSF,			"igmp_max_msf" },
36726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_INET_PEER_THRESHOLD,		"inet_peer_threshold" },
36826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_INET_PEER_MINTTL,		"inet_peer_minttl" },
36926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_INET_PEER_MAXTTL,		"inet_peer_maxttl" },
37026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_INET_PEER_GC_MINTIME,		"inet_peer_gc_mintime" },
37126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_INET_PEER_GC_MAXTIME,		"inet_peer_gc_maxtime" },
37226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_ORPHAN_RETRIES,			"tcp_orphan_retries" },
37326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_FACK,				"tcp_fack" },
37426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_REORDERING,			"tcp_reordering" },
37526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_ECN,				"tcp_ecn" },
37626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_DSACK,				"tcp_dsack" },
37726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_MEM,				"tcp_mem" },
37826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_WMEM,				"tcp_wmem" },
37926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_RMEM,				"tcp_rmem" },
38026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_APP_WIN,			"tcp_app_win" },
38126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_ADV_WIN_SCALE,			"tcp_adv_win_scale" },
38226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_TW_REUSE,			"tcp_tw_reuse" },
38326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_FRTO,				"tcp_frto" },
38426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_FRTO_RESPONSE,			"tcp_frto_response" },
38526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_LOW_LATENCY,			"tcp_low_latency" },
38626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_NO_METRICS_SAVE,		"tcp_no_metrics_save" },
38726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_MODERATE_RCVBUF,		"tcp_moderate_rcvbuf" },
38826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_TSO_WIN_DIVISOR,		"tcp_tso_win_divisor" },
38926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	NET_TCP_CONG_CONTROL,			"tcp_congestion_control" },
39026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_MTU_PROBING,			"tcp_mtu_probing" },
39126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_BASE_MSS,			"tcp_base_mss" },
39226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS,	"tcp_workaround_signed_windows" },
39326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_SLOW_START_AFTER_IDLE,		"tcp_slow_start_after_idle" },
39426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CIPSOV4_CACHE_ENABLE,		"cipso_cache_enable" },
39526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CIPSOV4_CACHE_BUCKET_SIZE,		"cipso_cache_bucket_size" },
39626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CIPSOV4_RBM_OPTFMT,			"cipso_rbm_optfmt" },
39726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_CIPSOV4_RBM_STRICTVALID,		"cipso_rbm_strictvalid" },
39826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_TCP_AVAIL_CONG_CONTROL "tcp_available_congestion_control" no longer used */
39926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	NET_TCP_ALLOWED_CONG_CONTROL,		"tcp_allowed_congestion_control" },
40026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TCP_MAX_SSTHRESH,			"tcp_max_ssthresh" },
40126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
40226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ICMP_ECHO_IGNORE_ALL,		"icmp_echo_ignore_all" },
40326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,	"icmp_echo_ignore_broadcasts" },
40426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,	"icmp_ignore_bogus_error_responses" },
40526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,	"icmp_errors_use_inbound_ifaddr" },
40626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ICMP_RATELIMIT,		"icmp_ratelimit" },
40726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_ICMP_RATEMASK,			"icmp_ratemask" },
40826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
40926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_IPFRAG_HIGH_THRESH,		"ipfrag_high_thresh" },
41026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_IPFRAG_LOW_THRESH,		"ipfrag_low_thresh" },
41126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_IPFRAG_TIME,			"ipfrag_time" },
41226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
41326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV4_IPFRAG_SECRET_INTERVAL,	"ipfrag_secret_interval" },
41426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_IPFRAG_MAX_DIST "ipfrag_max_dist" no longer used */
41526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
41626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	2088 /* NET_IPQ_QMAX */,		"ip_queue_maxlen" },
41726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
41826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_TCP_DEFAULT_WIN_SCALE unused */
41926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_TCP_BIC_BETA unused */
42026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_TCP_MAX_KA_PROBES unused */
42126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_IP_MASQ_DEBUG unused */
42226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_TCP_SYN_TAILDROP unused */
42326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ICMP_SOURCEQUENCH_RATE unused */
42426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ICMP_DESTUNREACH_RATE unused */
42526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ICMP_TIMEEXCEED_RATE unused */
42626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ICMP_PARAMPROB_RATE unused */
42726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ICMP_ECHOREPLY_RATE unused */
42826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV4_ALWAYS_DEFRAG unused */
42926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
43026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
43126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
43226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipx_table[] = {
43326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPX_PPROP_BROADCASTING,	"ipx_pprop_broadcasting" },
43426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPX_FORWARDING unused */
43526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
43626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
43726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
43826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_atalk_table[] = {
43926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ATALK_AARP_EXPIRY_TIME,		"aarp-expiry-time" },
44026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ATALK_AARP_TICK_TIME,		"aarp-tick-time" },
44126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ATALK_AARP_RETRANSMIT_LIMIT,	"aarp-retransmit-limit" },
44226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ATALK_AARP_RESOLVE_TIME,		"aarp-resolve-time" },
44326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{},
44426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
44526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
44626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_netrom_table[] = {
44726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_DEFAULT_PATH_QUALITY,		"default_path_quality" },
44826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER,	"obsolescence_count_initialiser" },
44926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_NETWORK_TTL_INITIALISER,		"network_ttl_initialiser" },
45026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_TRANSPORT_TIMEOUT,			"transport_timeout" },
45126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_TRANSPORT_MAXIMUM_TRIES,		"transport_maximum_tries" },
45226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY,		"transport_acknowledge_delay" },
45326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_TRANSPORT_BUSY_DELAY,		"transport_busy_delay" },
45426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE,	"transport_requested_window_size" },
45526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT,	"transport_no_activity_timeout" },
45626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_ROUTING_CONTROL,			"routing_control" },
45726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_LINK_FAILS_COUNT,			"link_fails_count" },
45826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NETROM_RESET,				"reset" },
45926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
46026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
46126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
46226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ax25_param_table[] = {
46326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_IP_DEFAULT_MODE,	"ip_default_mode" },
46426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_DEFAULT_MODE,		"ax25_default_mode" },
46526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_BACKOFF_TYPE,		"backoff_type" },
46626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_CONNECT_MODE,		"connect_mode" },
46726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_STANDARD_WINDOW,	"standard_window_size" },
46826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_EXTENDED_WINDOW,	"extended_window_size" },
46926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_T1_TIMEOUT,		"t1_timeout" },
47026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_T2_TIMEOUT,		"t2_timeout" },
47126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_T3_TIMEOUT,		"t3_timeout" },
47226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_IDLE_TIMEOUT,		"idle_timeout" },
47326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_N2,			"maximum_retry_count" },
47426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_PACLEN,		"maximum_packet_length" },
47526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_PROTOCOL,		"protocol" },
47626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_AX25_DAMA_SLAVE_TIMEOUT,	"dama_slave_timeout" },
47726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
47826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
47926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
48026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ax25_table[] = {
48126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	0, NULL, bin_net_ax25_param_table },
48226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
48326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
48426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
48526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_rose_table[] = {
48626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_RESTART_REQUEST_TIMEOUT,	"restart_request_timeout" },
48726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_CALL_REQUEST_TIMEOUT,		"call_request_timeout" },
48826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_RESET_REQUEST_TIMEOUT,		"reset_request_timeout" },
48926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_CLEAR_REQUEST_TIMEOUT,		"clear_request_timeout" },
49026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_ACK_HOLD_BACK_TIMEOUT,		"acknowledge_hold_back_timeout" },
49126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_ROUTING_CONTROL,		"routing_control" },
49226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_LINK_FAIL_TIMEOUT,		"link_fail_timeout" },
49326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_MAX_VCS,			"maximum_virtual_circuits" },
49426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_WINDOW_SIZE,			"window_size" },
49526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_ROSE_NO_ACTIVITY_TIMEOUT,		"no_activity_timeout" },
49626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
49726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
49826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
49926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv6_conf_var_table[] = {
50026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_FORWARDING,			"forwarding" },
50126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_HOP_LIMIT,			"hop_limit" },
50226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_MTU,				"mtu" },
50326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ACCEPT_RA,			"accept_ra" },
50426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ACCEPT_REDIRECTS,		"accept_redirects" },
50526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_AUTOCONF,			"autoconf" },
50626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_DAD_TRANSMITS,			"dad_transmits" },
50726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_RTR_SOLICITS,			"router_solicitations" },
50826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_RTR_SOLICIT_INTERVAL,		"router_solicitation_interval" },
50926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_RTR_SOLICIT_DELAY,		"router_solicitation_delay" },
51026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_USE_TEMPADDR,			"use_tempaddr" },
51126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_TEMP_VALID_LFT,		"temp_valid_lft" },
51226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_TEMP_PREFERED_LFT,		"temp_prefered_lft" },
51326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_REGEN_MAX_RETRY,		"regen_max_retry" },
51426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_MAX_DESYNC_FACTOR,		"max_desync_factor" },
51526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_MAX_ADDRESSES,			"max_addresses" },
51626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_FORCE_MLD_VERSION,		"force_mld_version" },
51726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ACCEPT_RA_DEFRTR,		"accept_ra_defrtr" },
51826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ACCEPT_RA_PINFO,		"accept_ra_pinfo" },
51926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ACCEPT_RA_RTR_PREF,		"accept_ra_rtr_pref" },
52026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_RTR_PROBE_INTERVAL,		"router_probe_interval" },
52126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN,	"accept_ra_rt_info_max_plen" },
52226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_PROXY_NDP,			"proxy_ndp" },
52326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ACCEPT_SOURCE_ROUTE,		"accept_source_route" },
524d93331965729850303f6111381c1a4a9e9b8ae5aBen Greear	{ CTL_INT,	NET_IPV6_ACCEPT_RA_FROM_LOCAL,		"accept_ra_from_local" },
52526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
52626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
52726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
52826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv6_conf_table[] = {
52926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_PROTO_CONF_ALL,		"all",	bin_net_ipv6_conf_var_table },
53026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_PROTO_CONF_DEFAULT, 	"default", bin_net_ipv6_conf_var_table },
53126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	0, NULL, bin_net_ipv6_conf_var_table },
53226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
53326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
53426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
53526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv6_route_table[] = {
53626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_IPV6_ROUTE_FLUSH	"flush"  no longer used */
53726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_GC_THRESH,		"gc_thresh" },
53826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_MAX_SIZE,		"max_size" },
53926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_GC_MIN_INTERVAL,		"gc_min_interval" },
54026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_GC_TIMEOUT,		"gc_timeout" },
54126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_GC_INTERVAL,		"gc_interval" },
54226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_GC_ELASTICITY,		"gc_elasticity" },
54326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_MTU_EXPIRES,		"mtu_expires" },
54426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_MIN_ADVMSS,		"min_adv_mss" },
54526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS,	"gc_min_interval_ms" },
54626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
54726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
54826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
54926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv6_icmp_table[] = {
55026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_ICMP_RATELIMIT,	"ratelimit" },
55126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
55226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
55326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
55426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_ipv6_table[] = {
55526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV6_CONF,		"conf",		bin_net_ipv6_conf_table },
55626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV6_NEIGH,		"neigh",	bin_net_neigh_table },
55726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV6_ROUTE,		"route",	bin_net_ipv6_route_table },
55826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV6_ICMP,		"icmp",		bin_net_ipv6_icmp_table },
55926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_BINDV6ONLY,		"bindv6only" },
56026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_IP6FRAG_HIGH_THRESH,	"ip6frag_high_thresh" },
56126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_IP6FRAG_LOW_THRESH,	"ip6frag_low_thresh" },
56226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_IP6FRAG_TIME,		"ip6frag_time" },
56326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_IP6FRAG_SECRET_INTERVAL,	"ip6frag_secret_interval" },
56426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IPV6_MLD_MAX_MSF,		"mld_max_msf" },
56526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	2088 /* IPQ_QMAX */,		"ip6_queue_maxlen" },
56626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
56726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
56826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
56926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_x25_table[] = {
57026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_X25_RESTART_REQUEST_TIMEOUT,	"restart_request_timeout" },
57126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_X25_CALL_REQUEST_TIMEOUT,		"call_request_timeout" },
57226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_X25_RESET_REQUEST_TIMEOUT,	"reset_request_timeout" },
57326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_X25_CLEAR_REQUEST_TIMEOUT,	"clear_request_timeout" },
57426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_X25_ACK_HOLD_BACK_TIMEOUT,	"acknowledgement_hold_back_timeout" },
57526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_X25_FORWARD,			"x25_forward" },
57626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
57726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
57826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
57926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_tr_table[] = {
58026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_TR_RIF_TIMEOUT,	"rif_timeout" },
58126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
58226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
58326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
58426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
58526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_decnet_conf_vars[] = {
58626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_CONF_DEV_FORWARDING,	"forwarding" },
58726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_CONF_DEV_PRIORITY,	"priority" },
58826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_CONF_DEV_T2,		"t2" },
58926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_CONF_DEV_T3,		"t3" },
59026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
59126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
59226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
59326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_decnet_conf[] = {
59426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR, NET_DECNET_CONF_ETHER,    "ethernet", bin_net_decnet_conf_vars },
59526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR, NET_DECNET_CONF_GRE,	     "ipgre",    bin_net_decnet_conf_vars },
59626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR, NET_DECNET_CONF_X25,	     "x25",      bin_net_decnet_conf_vars },
59726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR, NET_DECNET_CONF_PPP,	     "ppp",      bin_net_decnet_conf_vars },
59826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR, NET_DECNET_CONF_DDCMP,    "ddcmp",    bin_net_decnet_conf_vars },
59926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR, NET_DECNET_CONF_LOOPBACK, "loopback", bin_net_decnet_conf_vars },
60026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR, 0,			     NULL,	 bin_net_decnet_conf_vars },
60126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
60226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
60326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
60426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_decnet_table[] = {
60526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_DECNET_CONF,		"conf",	bin_net_decnet_conf },
60626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DNADR,	NET_DECNET_NODE_ADDRESS,	"node_address" },
60726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	NET_DECNET_NODE_NAME,		"node_name" },
60826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	NET_DECNET_DEFAULT_DEVICE,	"default_device" },
60926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_TIME_WAIT,		"time_wait" },
61026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_DN_COUNT,		"dn_count" },
61126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_DI_COUNT,		"di_count" },
61226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_DR_COUNT,		"dr_count" },
61326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_DST_GC_INTERVAL,	"dst_gc_interval" },
61426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_NO_FC_MAX_CWND,	"no_fc_max_cwnd" },
61526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_MEM,		"decnet_mem" },
61626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_RMEM,		"decnet_rmem" },
61726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_WMEM,		"decnet_wmem" },
61826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_DECNET_DEBUG_LEVEL,	"debug" },
61926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
62026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
62126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
62226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_sctp_table[] = {
62326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_RTO_INITIAL,		"rto_initial" },
62426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_RTO_MIN,		"rto_min" },
62526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_RTO_MAX,		"rto_max" },
62626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_RTO_ALPHA,		"rto_alpha_exp_divisor" },
62726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_RTO_BETA,		"rto_beta_exp_divisor" },
62826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_VALID_COOKIE_LIFE,	"valid_cookie_life" },
62926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_ASSOCIATION_MAX_RETRANS,	"association_max_retrans" },
63026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_PATH_MAX_RETRANS,	"path_max_retrans" },
63126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_MAX_INIT_RETRANSMITS,	"max_init_retransmits" },
63226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_HB_INTERVAL,		"hb_interval" },
63326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_PRESERVE_ENABLE,	"cookie_preserve_enable" },
63426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_MAX_BURST,		"max_burst" },
63526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_ADDIP_ENABLE,		"addip_enable" },
63626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_PRSCTP_ENABLE,		"prsctp_enable" },
63726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_SNDBUF_POLICY,		"sndbuf_policy" },
63826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_SACK_TIMEOUT,		"sack_timeout" },
63926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_SCTP_RCVBUF_POLICY,		"rcvbuf_policy" },
64026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
64126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
64226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
64326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_llc_llc2_timeout_table[] = {
64426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_LLC2_ACK_TIMEOUT,	"ack" },
64526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_LLC2_P_TIMEOUT,	"p" },
64626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_LLC2_REJ_TIMEOUT,	"rej" },
64726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_LLC2_BUSY_TIMEOUT,	"busy" },
64826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
64926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
65026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
65126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_llc_station_table[] = {
65226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_LLC_STATION_ACK_TIMEOUT,	"ack_timeout" },
65326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
65426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
65526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
65626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_llc_llc2_table[] = {
65726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_LLC2,		"timeout",	bin_net_llc_llc2_timeout_table },
65826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
65926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
66026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
66126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_llc_table[] = {
66226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_LLC2,		"llc2",		bin_net_llc_llc2_table },
66326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_LLC_STATION,	"station",	bin_net_llc_station_table },
66426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
66526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
66626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
66726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_netfilter_table[] = {
66826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_MAX,			"nf_conntrack_max" },
66926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT "nf_conntrack_tcp_timeout_syn_sent" no longer used */
67026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV "nf_conntrack_tcp_timeout_syn_recv" no longer used */
67126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED "nf_conntrack_tcp_timeout_established" no longer used */
67226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT "nf_conntrack_tcp_timeout_fin_wait" no longer used */
67326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT "nf_conntrack_tcp_timeout_close_wait" no longer used */
67426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK "nf_conntrack_tcp_timeout_last_ack" no longer used */
67526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT "nf_conntrack_tcp_timeout_time_wait" no longer used */
67626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE "nf_conntrack_tcp_timeout_close" no longer used */
67726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_UDP_TIMEOUT	"nf_conntrack_udp_timeout" no longer used */
67826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM "nf_conntrack_udp_timeout_stream" no longer used */
67926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_ICMP_TIMEOUT "nf_conntrack_icmp_timeout" no longer used */
68026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_GENERIC_TIMEOUT "nf_conntrack_generic_timeout" no longer used */
68126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_BUCKETS,		"nf_conntrack_buckets" },
68226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_LOG_INVALID,		"nf_conntrack_log_invalid" },
68326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS "nf_conntrack_tcp_timeout_max_retrans" no longer used */
68426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_TCP_LOOSE,		"nf_conntrack_tcp_loose" },
68526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_TCP_BE_LIBERAL,	"nf_conntrack_tcp_be_liberal" },
68626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_TCP_MAX_RETRANS,	"nf_conntrack_tcp_max_retrans" },
68726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED "nf_conntrack_sctp_timeout_closed" no longer used */
68826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT "nf_conntrack_sctp_timeout_cookie_wait" no longer used */
68926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED "nf_conntrack_sctp_timeout_cookie_echoed" no longer used */
69026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED "nf_conntrack_sctp_timeout_established" no longer used */
69126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT "nf_conntrack_sctp_timeout_shutdown_sent" no longer used */
69226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD "nf_conntrack_sctp_timeout_shutdown_recd" no longer used */
69326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT "nf_conntrack_sctp_timeout_shutdown_ack_sent" no longer used */
69426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_COUNT,			"nf_conntrack_count" },
69526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_ICMPV6_TIMEOUT "nf_conntrack_icmpv6_timeout" no longer used */
69626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_NF_CONNTRACK_FRAG6_TIMEOUT "nf_conntrack_frag6_timeout" no longer used */
69726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_FRAG6_LOW_THRESH,	"nf_conntrack_frag6_low_thresh" },
69826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_FRAG6_HIGH_THRESH,	"nf_conntrack_frag6_high_thresh" },
69926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_NF_CONNTRACK_CHECKSUM,		"nf_conntrack_checksum" },
70026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
70126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
70226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
70326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
70426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_irda_table[] = {
70526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_DISCOVERY,		"discovery" },
70626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	NET_IRDA_DEVNAME,		"devname" },
70726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_DEBUG,			"debug" },
70826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_FAST_POLL,		"fast_poll_increase" },
70926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_DISCOVERY_SLOTS,	"discovery_slots" },
71026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_DISCOVERY_TIMEOUT,	"discovery_timeout" },
71126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_SLOT_TIMEOUT,		"slot_timeout" },
71226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_MAX_BAUD_RATE,		"max_baud_rate" },
71326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_MIN_TX_TURN_TIME,	"min_tx_turn_time" },
71426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_MAX_TX_DATA_SIZE,	"max_tx_data_size" },
71526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_MAX_TX_WINDOW,		"max_tx_window" },
71626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_MAX_NOREPLY_TIME,	"max_noreply_time" },
71726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_WARN_NOREPLY_TIME,	"warn_noreply_time" },
71826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	NET_IRDA_LAP_KEEPALIVE_TIME,	"lap_keepalive_time" },
71926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
72026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
72126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
72226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_net_table[] = {
72326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_CORE,		"core",		bin_net_core_table },
72426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_ETHER not used */
72526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_802 not used */
72626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_UNIX,		"unix",		bin_net_unix_table },
72726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV4,		"ipv4",		bin_net_ipv4_table },
72826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPX,		"ipx",		bin_net_ipx_table },
72926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_ATALK,		"appletalk",	bin_net_atalk_table },
73026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_NETROM,		"netrom",	bin_net_netrom_table },
73126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_AX25,		"ax25",		bin_net_ax25_table },
73226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/*  NET_BRIDGE "bridge" no longer used */
73326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_ROSE,		"rose",		bin_net_rose_table },
73426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IPV6,		"ipv6",		bin_net_ipv6_table },
73526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_X25,		"x25",		bin_net_x25_table },
73626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_TR,			"token-ring",	bin_net_tr_table },
73726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_DECNET,		"decnet",	bin_net_decnet_table },
73826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/*  NET_ECONET not used */
73926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_SCTP,		"sctp",		bin_net_sctp_table },
74026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_LLC,		"llc",		bin_net_llc_table },
74126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_NETFILTER,		"netfilter",	bin_net_netfilter_table },
74226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* NET_DCCP "dccp" no longer used */
74326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	NET_IRDA,		"irda",		bin_net_irda_table },
74426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	2089,			"nf_conntrack_max" },
74526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
74626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
74726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
74826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_fs_quota_table[] = {
74926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_LOOKUPS,		"lookups" },
75026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_DROPS,		"drops" },
75126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_READS,		"reads" },
75226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_WRITES,		"writes" },
75326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_CACHE_HITS,	"cache_hits" },
75426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_ALLOCATED,	"allocated_dquots" },
75526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_FREE,		"free_dquots" },
75626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_SYNCS,		"syncs" },
75726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DQ_WARNINGS,		"warnings" },
75826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
75926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
76026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
76126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_fs_xfs_table[] = {
76226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_SGID_INHERIT,	"irix_sgid_inherit" },
76326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_SYMLINK_MODE,	"irix_symlink_mode" },
76426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_PANIC_MASK,		"panic_mask" },
76526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
76626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_ERRLEVEL,		"error_level" },
76726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_SYNCD_TIMER,	"xfssyncd_centisecs" },
76826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_INHERIT_SYNC,	"inherit_sync" },
76926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_INHERIT_NODUMP,	"inherit_nodump" },
77026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_INHERIT_NOATIME,	"inherit_noatime" },
77126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_BUF_TIMER,		"xfsbufd_centisecs" },
77226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_BUF_AGE,		"age_buffer_centisecs" },
77326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_INHERIT_NOSYM,	"inherit_nosymlinks" },
77426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_ROTORSTEP,	"rotorstep" },
77526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_INHERIT_NODFRG,	"inherit_nodefrag" },
77626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_FILESTREAM_TIMER,	"filestream_centisecs" },
77726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	XFS_STATS_CLEAR,	"stats_clear" },
77826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
77926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
78026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
78126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_fs_ocfs2_nm_table[] = {
78226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_STR,	1, "hb_ctl_path" },
78326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
78426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
78526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
78626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_fs_ocfs2_table[] = {
78726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	1,	"nm",	bin_fs_ocfs2_nm_table },
78826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
78926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
79026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
79126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_inotify_table[] = {
79226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	INOTIFY_MAX_USER_INSTANCES,	"max_user_instances" },
79326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	INOTIFY_MAX_USER_WATCHES,	"max_user_watches" },
79426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	INOTIFY_MAX_QUEUED_EVENTS,	"max_queued_events" },
79526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
79626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
79726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
79826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_fs_table[] = {
79926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_NRINODE,		"inode-nr" },
80026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_STATINODE,		"inode-state" },
80126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* FS_MAXINODE unused */
80226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* FS_NRDQUOT unused */
80326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* FS_MAXDQUOT unused */
80426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* FS_NRFILE "file-nr" no longer used */
80526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_MAXFILE,		"file-max" },
80626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DENTRY,		"dentry-state" },
80726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* FS_NRSUPER unused */
80826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* FS_MAXUPSER unused */
80926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_OVERFLOWUID,		"overflowuid" },
81026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_OVERFLOWGID,		"overflowgid" },
81126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_LEASES,		"leases-enable" },
81226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_DIR_NOTIFY,		"dir-notify-enable" },
81326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	FS_LEASE_TIME,		"lease-break-time" },
81426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	FS_DQSTATS,		"quota",	bin_fs_quota_table },
81526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	FS_XFS,			"xfs",		bin_fs_xfs_table },
81626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_ULONG,	FS_AIO_NR,		"aio-nr" },
81726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_ULONG,	FS_AIO_MAX_NR,		"aio-max-nr" },
81826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	FS_INOTIFY,		"inotify",	bin_inotify_table },
81926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	FS_OCFS2,		"ocfs2",	bin_fs_ocfs2_table },
82026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	KERN_SETUID_DUMPABLE,	"suid_dumpable" },
82126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
82226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
82326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
82426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_ipmi_table[] = {
82526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	DEV_IPMI_POWEROFF_POWERCYCLE,	"poweroff_powercycle" },
82626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
82726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
82826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
82926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_mac_hid_files[] = {
83026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES unused */
83126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES unused */
83226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	DEV_MAC_HID_MOUSE_BUTTON_EMULATION,	"mouse_button_emulation" },
83326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE,	"mouse_button2_keycode" },
83426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE,	"mouse_button3_keycode" },
83526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES unused */
83626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
83726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
83826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
83926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_raid_table[] = {
84026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	DEV_RAID_SPEED_LIMIT_MIN,	"speed_limit_min" },
84126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	DEV_RAID_SPEED_LIMIT_MAX,	"speed_limit_max" },
84226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
84326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
84426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
84526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_scsi_table[] = {
84626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT, DEV_SCSI_LOGGING_LEVEL, "logging_level" },
84726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
84826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
84926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
85026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_dev_table[] = {
85126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* DEV_CDROM	"cdrom" no longer used */
85226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* DEV_HWMON unused */
85326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* DEV_PARPORT	"parport" no longer used */
85426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	DEV_RAID,	"raid",		bin_raid_table },
85526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	DEV_MAC_HID,	"mac_hid",	bin_mac_hid_files },
85626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	DEV_SCSI,	"scsi",		bin_scsi_table },
85726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	DEV_IPMI,	"ipmi",		bin_ipmi_table },
85826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
85926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
86026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
86126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_bus_isa_table[] = {
86226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	BUS_ISA_MEM_BASE,	"membase" },
86326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	BUS_ISA_PORT_BASE,	"portbase" },
86426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	BUS_ISA_PORT_SHIFT,	"portshift" },
86526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
86626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
86726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
86826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_bus_table[] = {
86926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_BUS_ISA,	"isa",	bin_bus_isa_table },
87026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
87126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
87226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
87326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
87426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_s390dbf_table[] = {
87526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	5678 /* CTL_S390DBF_STOPPABLE */, "debug_stoppable" },
87626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	5679 /* CTL_S390DBF_ACTIVE */,	  "debug_active" },
87726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
87826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
87926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
88026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_sunrpc_table[] = {
88126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_RPCDEBUG	"rpc_debug"  no longer used */
88226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_NFSDEBUG "nfs_debug"  no longer used */
88326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_NFSDDEBUG "nfsd_debug" no longer used  */
88426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_NLMDEBUG "nlm_debug" no longer used */
88526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
88626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	CTL_SLOTTABLE_UDP,	"udp_slot_table_entries" },
88726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	CTL_SLOTTABLE_TCP,	"tcp_slot_table_entries" },
88826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	CTL_MIN_RESVPORT,	"min_resvport" },
88926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	CTL_MAX_RESVPORT,	"max_resvport" },
89026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
89126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
89226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
89326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_pm_table[] = {
89426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* frv specific */
89526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* 1 == CTL_PM_SUSPEND	"suspend"  no longer used" */
89626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	2 /* CTL_PM_CMODE */,		"cmode" },
89726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	3 /* CTL_PM_P0 */,		"p0" },
89826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_INT,	4 /* CTL_PM_CM */,		"cm" },
89926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
90026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
90126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
90226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table bin_root_table[] = {
90326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_KERN,	"kernel",	bin_kern_table },
90426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_VM,		"vm",		bin_vm_table },
90526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_NET,	"net",		bin_net_table },
90626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_PROC not used */
90726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_FS,		"fs",		bin_fs_table },
90826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_DEBUG "debug" no longer used */
90926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_DEV,	"dev",		bin_dev_table },
91026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_BUS,	"bus",		bin_bus_table },
91126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_ABI,	"abi" },
91226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_CPU not used */
91326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* CTL_ARLAN "arlan" no longer used */
91426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_S390DBF,	"s390dbf",	bin_s390dbf_table },
91526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_SUNRPC,	"sunrpc",	bin_sunrpc_table },
91626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{ CTL_DIR,	CTL_PM,		"pm",		bin_pm_table },
91726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	{}
91826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman};
91926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
92026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t bin_dir(struct file *file,
92126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
92226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman{
92326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return -ENOTDIR;
92426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman}
92526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
92626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
92726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t bin_string(struct file *file,
92826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
92926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman{
93026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t result, copied = 0;
93126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
93226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (oldval && oldlen) {
93326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char __user *lastp;
93426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		loff_t pos = 0;
93526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		int ch;
93626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
93726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = vfs_read(file, oldval, oldlen, &pos);
93826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
93926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
94026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
94126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		copied = result;
94226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		lastp = oldval + copied - 1;
94326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
94426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = -EFAULT;
94526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (get_user(ch, lastp))
94626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
94726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
94826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		/* Trim off the trailing newline */
94926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (ch == '\n') {
95026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			result = -EFAULT;
95126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (put_user('\0', lastp))
95226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				goto out;
95326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			copied -= 1;
95426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		}
95526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
95626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
95726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (newval && newlen) {
95826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		loff_t pos = 0;
95926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
96026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = vfs_write(file, newval, newlen, &pos);
96126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
96226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
96326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
96426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
96526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = copied;
96626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout:
96726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
96826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman}
96926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
97026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t bin_intvec(struct file *file,
97126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
97226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman{
97326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t copied = 0;
97426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	char *buffer;
97526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t result;
97626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
97726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = -ENOMEM;
97826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	buffer = kmalloc(BUFSZ, GFP_KERNEL);
97926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (!buffer)
98026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		goto out;
98126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
98226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (oldval && oldlen) {
98326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		unsigned __user *vec = oldval;
98426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		size_t length = oldlen / sizeof(*vec);
98526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char *str, *end;
98626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		int i;
98726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
9887bb307e894d51308aa0582a8c4cc5875bbc645b9Al Viro		result = kernel_read(file, 0, buffer, BUFSZ - 1);
98926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
99026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out_kfree;
99126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
99226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		str = buffer;
99326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		end = str + result;
99426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		*end++ = '\0';
99526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		for (i = 0; i < length; i++) {
99626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			unsigned long value;
99726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
99826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			value = simple_strtoul(str, &str, 10);
99926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			while (isspace(*str))
100026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				str++;
100126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
100226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			result = -EFAULT;
100326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (put_user(value, vec + i))
100426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				goto out_kfree;
100526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
100626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			copied += sizeof(*vec);
100726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (!isdigit(*str))
100826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				break;
100926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		}
101026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
101126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
101226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (newval && newlen) {
101326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		unsigned __user *vec = newval;
101426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		size_t length = newlen / sizeof(*vec);
101526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char *str, *end;
101626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		int i;
101726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
101826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		str = buffer;
101926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		end = str + BUFSZ;
102026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		for (i = 0; i < length; i++) {
102126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			unsigned long value;
102226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
102326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			result = -EFAULT;
102426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (get_user(value, vec + i))
102526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				goto out_kfree;
102626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1027f02147ef190b3963bb61ec0e140ec47f22889f38Chen Gang			str += scnprintf(str, end - str, "%lu\t", value);
102826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		}
102926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
10307bb307e894d51308aa0582a8c4cc5875bbc645b9Al Viro		result = kernel_write(file, buffer, str - buffer, 0);
103126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
103226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out_kfree;
103326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
103426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = copied;
103526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout_kfree:
103626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	kfree(buffer);
103726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout:
103826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
103926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman}
104026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
104126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t bin_ulongvec(struct file *file,
104226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
1043afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman{
104426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t copied = 0;
104526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	char *buffer;
104626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t result;
104726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
104826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = -ENOMEM;
104926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	buffer = kmalloc(BUFSZ, GFP_KERNEL);
105026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (!buffer)
105126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		goto out;
105226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
105326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (oldval && oldlen) {
105426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		unsigned long __user *vec = oldval;
105526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		size_t length = oldlen / sizeof(*vec);
105626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char *str, *end;
105726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		int i;
105826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
10597bb307e894d51308aa0582a8c4cc5875bbc645b9Al Viro		result = kernel_read(file, 0, buffer, BUFSZ - 1);
106026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
106126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out_kfree;
106226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
106326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		str = buffer;
106426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		end = str + result;
106526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		*end++ = '\0';
106626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		for (i = 0; i < length; i++) {
106726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			unsigned long value;
106826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
106926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			value = simple_strtoul(str, &str, 10);
107026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			while (isspace(*str))
107126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				str++;
107226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
107326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			result = -EFAULT;
107426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (put_user(value, vec + i))
107526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				goto out_kfree;
107626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
107726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			copied += sizeof(*vec);
107826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (!isdigit(*str))
107926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				break;
108026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		}
1081afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman	}
1082afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
108326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (newval && newlen) {
108426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		unsigned long __user *vec = newval;
108526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		size_t length = newlen / sizeof(*vec);
108626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char *str, *end;
108726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		int i;
108826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
108926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		str = buffer;
109026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		end = str + BUFSZ;
109126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		for (i = 0; i < length; i++) {
109226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			unsigned long value;
109326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
109426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			result = -EFAULT;
109526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (get_user(value, vec + i))
109626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				goto out_kfree;
109726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1098f02147ef190b3963bb61ec0e140ec47f22889f38Chen Gang			str += scnprintf(str, end - str, "%lu\t", value);
109926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		}
110026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
11017bb307e894d51308aa0582a8c4cc5875bbc645b9Al Viro		result = kernel_write(file, buffer, str - buffer, 0);
110226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
110326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out_kfree;
1104afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman	}
110526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = copied;
110626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout_kfree:
110726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	kfree(buffer);
110826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout:
110926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
111026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman}
111126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
111226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t bin_uuid(struct file *file,
111326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
1114afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman{
111526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t result, copied = 0;
111626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
111726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* Only supports reads */
111826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (oldval && oldlen) {
111926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char buf[40], *str = buf;
112026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		unsigned char uuid[16];
112126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		int i;
112226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
11237bb307e894d51308aa0582a8c4cc5875bbc645b9Al Viro		result = kernel_read(file, 0, buf, sizeof(buf) - 1);
112426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
112526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
112626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
112726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		buf[result] = '\0';
112826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
112926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		/* Convert the uuid to from a string to binary */
113026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		for (i = 0; i < 16; i++) {
113126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			result = -EIO;
113226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (!isxdigit(str[0]) || !isxdigit(str[1]))
113326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				goto out;
113426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
113569e4469a39b67e9923731d5d77d45c04837d5defAndy Shevchenko			uuid[i] = (hex_to_bin(str[0]) << 4) |
113669e4469a39b67e9923731d5d77d45c04837d5defAndy Shevchenko					hex_to_bin(str[1]);
113726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			str += 2;
113826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			if (*str == '-')
113926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				str++;
114026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		}
114126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
114226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (oldlen > 16)
114326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			oldlen = 16;
114426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
114526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = -EFAULT;
114626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (copy_to_user(oldval, uuid, oldlen))
114726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
114826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
114926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		copied = oldlen;
115026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
115126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = copied;
115226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout:
115326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
115426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman}
115526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
115626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t bin_dn_node_address(struct file *file,
115726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
115826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman{
115926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t result, copied = 0;
116026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
116126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (oldval && oldlen) {
116226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char buf[15], *nodep;
116326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		unsigned long area, node;
116426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		__le16 dnaddr;
116526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
11667bb307e894d51308aa0582a8c4cc5875bbc645b9Al Viro		result = kernel_read(file, 0, buf, sizeof(buf) - 1);
116726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
116826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
116926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
117026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		buf[result] = '\0';
117126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1172b595076a180a56d1bb170e6eceda6eb9d76f4cd3Uwe Kleine-König		/* Convert the decnet address to binary */
117326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = -EIO;
1174df1778be1a33edffa51d094eeda87c858ded6560Xi Wang		nodep = strchr(buf, '.');
117526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (!nodep)
117626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
1177df1778be1a33edffa51d094eeda87c858ded6560Xi Wang		++nodep;
117826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
117926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		area = simple_strtoul(buf, NULL, 10);
118026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		node = simple_strtoul(nodep, NULL, 10);
118126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
118226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = -EIO;
118326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if ((area > 63)||(node > 1023))
118426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
118526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
118626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		dnaddr = cpu_to_le16((area << 10) | node);
118726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
118826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = -EFAULT;
118926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (put_user(dnaddr, (__le16 __user *)oldval))
119026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
119126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
119226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		copied = sizeof(dnaddr);
119326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
119426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
119526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (newval && newlen) {
119626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		__le16 dnaddr;
119726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		char buf[15];
119826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		int len;
119926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
120026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = -EINVAL;
120126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (newlen != sizeof(dnaddr))
120226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
120326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
120426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = -EFAULT;
120526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (get_user(dnaddr, (__le16 __user *)newval))
120626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
120726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1208f02147ef190b3963bb61ec0e140ec47f22889f38Chen Gang		len = scnprintf(buf, sizeof(buf), "%hu.%hu",
120926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				le16_to_cpu(dnaddr) >> 10,
121026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				le16_to_cpu(dnaddr) & 0x3ff);
121126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
12127bb307e894d51308aa0582a8c4cc5875bbc645b9Al Viro		result = kernel_write(file, buf, len, 0);
121326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (result < 0)
121426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			goto out;
121526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
121626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
121726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = copied;
121826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout:
121926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
122026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman}
122126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
122226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic const struct bin_table *get_sysctl(const int *name, int nlen, char *path)
122326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman{
122426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	const struct bin_table *table = &bin_root_table[0];
122526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	int ctl_name;
122626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
122763395b65972c07edce595c9cc8a983016738cdacEric W. Biederman	/* The binary sysctl tables have a small maximum depth so
122863395b65972c07edce595c9cc8a983016738cdacEric W. Biederman	 * there is no danger of overflowing our path as it PATH_MAX
122963395b65972c07edce595c9cc8a983016738cdacEric W. Biederman	 * bytes long.
123063395b65972c07edce595c9cc8a983016738cdacEric W. Biederman	 */
123126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	memcpy(path, "sys/", 4);
123226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	path += 4;
123326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1234afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biedermanrepeat:
1235afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman	if (!nlen)
123626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		return ERR_PTR(-ENOTDIR);
123726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ctl_name = *name;
123826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	name++;
123926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	nlen--;
124026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	for ( ; table->convert; table++) {
124163395b65972c07edce595c9cc8a983016738cdacEric W. Biederman		int len = 0;
124226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
124326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		/*
124426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		 * For a wild card entry map from ifindex to network
124526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		 * device name.
124626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		 */
1247757010f026ab3044c594003e216d00a33ed95c56Eric W. Biederman		if (!table->ctl_name) {
1248757010f026ab3044c594003e216d00a33ed95c56Eric W. Biederman#ifdef CONFIG_NET
124963395b65972c07edce595c9cc8a983016738cdacEric W. Biederman			struct net *net = current->nsproxy->net_ns;
125063395b65972c07edce595c9cc8a983016738cdacEric W. Biederman			struct net_device *dev;
125126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			dev = dev_get_by_index(net, ctl_name);
125263395b65972c07edce595c9cc8a983016738cdacEric W. Biederman			if (dev) {
125363395b65972c07edce595c9cc8a983016738cdacEric W. Biederman				len = strlen(dev->name);
125463395b65972c07edce595c9cc8a983016738cdacEric W. Biederman				memcpy(path, dev->name, len);
125563395b65972c07edce595c9cc8a983016738cdacEric W. Biederman				dev_put(dev);
125663395b65972c07edce595c9cc8a983016738cdacEric W. Biederman			}
125763395b65972c07edce595c9cc8a983016738cdacEric W. Biederman#endif
1258757010f026ab3044c594003e216d00a33ed95c56Eric W. Biederman		/* Use the well known sysctl number to proc name mapping */
1259757010f026ab3044c594003e216d00a33ed95c56Eric W. Biederman		} else if (ctl_name == table->ctl_name) {
1260757010f026ab3044c594003e216d00a33ed95c56Eric W. Biederman			len = strlen(table->procname);
1261757010f026ab3044c594003e216d00a33ed95c56Eric W. Biederman			memcpy(path, table->procname, len);
1262757010f026ab3044c594003e216d00a33ed95c56Eric W. Biederman		}
126363395b65972c07edce595c9cc8a983016738cdacEric W. Biederman		if (len) {
126426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			path += len;
1265afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman			if (table->child) {
126626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman				*path++ = '/';
1267afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman				table = table->child;
1268afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman				goto repeat;
1269afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman			}
127026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			*path = '\0';
127126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			return table;
1272afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman		}
1273afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman	}
127426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return ERR_PTR(-ENOTDIR);
1275afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman}
1276afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
127726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic char *sysctl_getname(const int *name, int nlen, const struct bin_table **tablep)
1278afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman{
127926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	char *tmp, *result;
128026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
128126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = ERR_PTR(-ENOMEM);
128226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	tmp = __getname();
128326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (tmp) {
128426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		const struct bin_table *table = get_sysctl(name, nlen, tmp);
128526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = tmp;
128626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		*tablep = table;
128726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		if (IS_ERR(table)) {
128826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			__putname(tmp);
128926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			result = ERR_CAST(table);
1290afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman		}
1291afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman	}
129226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
1293afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman}
1294afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
129526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t binary_sysctl(const int *name, int nlen,
129626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
129726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman{
129826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	const struct bin_table *table = NULL;
129926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	struct vfsmount *mnt;
130026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	struct file *file;
130126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t result;
130226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	char *pathname;
130326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	int flags;
130426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
130526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	pathname = sysctl_getname(name, nlen, &table);
130626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = PTR_ERR(pathname);
130726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (IS_ERR(pathname))
130826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		goto out;
130926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
131026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* How should the sysctl be accessed? */
131126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (oldval && oldlen && newval && newlen) {
131226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		flags = O_RDWR;
131326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	} else if (newval && newlen) {
131426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		flags = O_WRONLY;
131526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	} else if (oldval && oldlen) {
131626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		flags = O_RDONLY;
131726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	} else {
131826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = 0;
131926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		goto out_putname;
132026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
132126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
132217cf22c33e1f1b5e435469c84e43872579497653Eric W. Biederman	mnt = task_active_pid_ns(current)->proc_mnt;
132373d049a40fc6269189c4e2ba6792cb5dd054883cAl Viro	file = file_open_root(mnt->mnt_root, mnt, pathname, flags);
132426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = PTR_ERR(file);
132526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (IS_ERR(file))
132626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		goto out_putname;
132726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
132826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = table->convert(file, oldval, oldlen, newval, newlen);
132926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
133026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	fput(file);
133126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout_putname:
13323d3c8f93a237b64580c5c5e138edeb1377e98230Michel Lespinasse	__putname(pathname);
133326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanout:
133426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
133526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman}
133626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
133726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1338afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#else /* CONFIG_SYSCTL_SYSCALL */
1339afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
134026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t binary_sysctl(const int *name, int nlen,
134126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
1342afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman{
13432830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	return -ENOSYS;
1344afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman}
1345afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
1346afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman#endif /* CONFIG_SYSCTL_SYSCALL */
1347afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
134826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
13492830b68361a9f58354ad043c6d85043ea917f907Eric W. Biedermanstatic void deprecated_sysctl_warning(const int *name, int nlen)
1350afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman{
1351afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman	int i;
1352afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman
135361cf693159d6a968a7014e24905143f71ed8ddcfAndi Kleen	/*
135461cf693159d6a968a7014e24905143f71ed8ddcfAndi Kleen	 * CTL_KERN/KERN_VERSION is used by older glibc and cannot
135561cf693159d6a968a7014e24905143f71ed8ddcfAndi Kleen	 * ever go away.
135661cf693159d6a968a7014e24905143f71ed8ddcfAndi Kleen	 */
135761cf693159d6a968a7014e24905143f71ed8ddcfAndi Kleen	if (name[0] == CTL_KERN && name[1] == KERN_VERSION)
135861cf693159d6a968a7014e24905143f71ed8ddcfAndi Kleen		return;
135961cf693159d6a968a7014e24905143f71ed8ddcfAndi Kleen
13602fb10732c3b3c9671b1a391996ce7e551876c25eEric W. Biederman	if (printk_ratelimit()) {
1361afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman		printk(KERN_INFO
1362afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman			"warning: process `%s' used the deprecated sysctl "
1363afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman			"system call with ", current->comm);
13642830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman		for (i = 0; i < nlen; i++)
1365afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman			printk("%d.", name[i]);
1366afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman		printk("\n");
1367afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman	}
13682830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	return;
13692830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman}
13702830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
13714440095c8268c1a5e11577097d2be429cec036caAndi Kleen#define WARN_ONCE_HASH_BITS 8
13724440095c8268c1a5e11577097d2be429cec036caAndi Kleen#define WARN_ONCE_HASH_SIZE (1<<WARN_ONCE_HASH_BITS)
13734440095c8268c1a5e11577097d2be429cec036caAndi Kleen
13744440095c8268c1a5e11577097d2be429cec036caAndi Kleenstatic DECLARE_BITMAP(warn_once_bitmap, WARN_ONCE_HASH_SIZE);
13754440095c8268c1a5e11577097d2be429cec036caAndi Kleen
13764440095c8268c1a5e11577097d2be429cec036caAndi Kleen#define FNV32_OFFSET 2166136261U
13774440095c8268c1a5e11577097d2be429cec036caAndi Kleen#define FNV32_PRIME 0x01000193
13784440095c8268c1a5e11577097d2be429cec036caAndi Kleen
13794440095c8268c1a5e11577097d2be429cec036caAndi Kleen/*
13804440095c8268c1a5e11577097d2be429cec036caAndi Kleen * Print each legacy sysctl (approximately) only once.
13814440095c8268c1a5e11577097d2be429cec036caAndi Kleen * To avoid making the tables non-const use a external
13824440095c8268c1a5e11577097d2be429cec036caAndi Kleen * hash-table instead.
13834440095c8268c1a5e11577097d2be429cec036caAndi Kleen * Worst case hash collision: 6, but very rarely.
13844440095c8268c1a5e11577097d2be429cec036caAndi Kleen * NOTE! We don't use the SMP-safe bit tests. We simply
13854440095c8268c1a5e11577097d2be429cec036caAndi Kleen * don't care enough.
13864440095c8268c1a5e11577097d2be429cec036caAndi Kleen */
13874440095c8268c1a5e11577097d2be429cec036caAndi Kleenstatic void warn_on_bintable(const int *name, int nlen)
13884440095c8268c1a5e11577097d2be429cec036caAndi Kleen{
13894440095c8268c1a5e11577097d2be429cec036caAndi Kleen	int i;
13904440095c8268c1a5e11577097d2be429cec036caAndi Kleen	u32 hash = FNV32_OFFSET;
13914440095c8268c1a5e11577097d2be429cec036caAndi Kleen
13924440095c8268c1a5e11577097d2be429cec036caAndi Kleen	for (i = 0; i < nlen; i++)
13934440095c8268c1a5e11577097d2be429cec036caAndi Kleen		hash = (hash ^ name[i]) * FNV32_PRIME;
13944440095c8268c1a5e11577097d2be429cec036caAndi Kleen	hash %= WARN_ONCE_HASH_SIZE;
13954440095c8268c1a5e11577097d2be429cec036caAndi Kleen	if (__test_and_set_bit(hash, warn_once_bitmap))
13964440095c8268c1a5e11577097d2be429cec036caAndi Kleen		return;
13974440095c8268c1a5e11577097d2be429cec036caAndi Kleen	deprecated_sysctl_warning(name, nlen);
13984440095c8268c1a5e11577097d2be429cec036caAndi Kleen}
13994440095c8268c1a5e11577097d2be429cec036caAndi Kleen
140026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biedermanstatic ssize_t do_sysctl(int __user *args_name, int nlen,
140126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
14022830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman{
14032830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	int name[CTL_MAXNAME];
14042830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	int i;
14052830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
140626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	/* Check args->nlen. */
140726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (nlen < 0 || nlen > CTL_MAXNAME)
14082830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman		return -ENOTDIR;
14092830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	/* Read in the sysctl name for simplicity */
14102830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	for (i = 0; i < nlen; i++)
14112830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman		if (get_user(name[i], args_name + i))
14122830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman			return -EFAULT;
14132830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
14144440095c8268c1a5e11577097d2be429cec036caAndi Kleen	warn_on_bintable(name, nlen);
14152830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
141626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return binary_sysctl(name, nlen, oldval, oldlen, newval, newlen);
14172830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman}
14182830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
14192830b68361a9f58354ad043c6d85043ea917f907Eric W. BiedermanSYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args)
14202830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman{
14212830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	struct __sysctl_args tmp;
142226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	size_t oldlen = 0;
142326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	ssize_t result;
14242830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
14252830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman	if (copy_from_user(&tmp, args, sizeof(tmp)))
14262830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman		return -EFAULT;
14272830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
142826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (tmp.oldval && !tmp.oldlenp)
142926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		return -EFAULT;
143026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
143126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (tmp.oldlenp && get_user(oldlen, tmp.oldlenp))
143226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		return -EFAULT;
143326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
143426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	result = do_sysctl(tmp.name, tmp.nlen, tmp.oldval, oldlen,
143526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			   tmp.newval, tmp.newlen);
143626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
143726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (result >= 0) {
143826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		oldlen = result;
143926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = 0;
144026a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	}
14412830b68361a9f58354ad043c6d85043ea917f907Eric W. Biederman
144226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (tmp.oldlenp && put_user(oldlen, tmp.oldlenp))
144326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		return -EFAULT;
144426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
144526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	return result;
1446afa588b2651a03da4bc601a17a244b1cd97264f2Eric W. Biederman}
1447da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
144826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1449da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman#ifdef CONFIG_COMPAT
1450da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
1451da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biedermanstruct compat_sysctl_args {
1452da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	compat_uptr_t	name;
1453da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	int		nlen;
1454da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	compat_uptr_t	oldval;
1455da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	compat_uptr_t	oldlenp;
1456da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	compat_uptr_t	newval;
1457da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	compat_size_t	newlen;
1458da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	compat_ulong_t	__unused[4];
1459da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman};
1460da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
1461c5ddd2024a87353f73068732cfd38d3dfec22e87Al ViroCOMPAT_SYSCALL_DEFINE1(sysctl, struct compat_sysctl_args __user *, args)
1462da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman{
1463da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	struct compat_sysctl_args tmp;
1464da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	compat_size_t __user *compat_oldlenp;
1465da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	size_t oldlen = 0;
1466da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	ssize_t result;
1467da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
1468da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	if (copy_from_user(&tmp, args, sizeof(tmp)))
1469da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman		return -EFAULT;
1470da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
147126a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (tmp.oldval && !tmp.oldlenp)
147226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		return -EFAULT;
1473da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
147426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	compat_oldlenp = compat_ptr(tmp.oldlenp);
147526a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (compat_oldlenp && get_user(oldlen, compat_oldlenp))
147626a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		return -EFAULT;
1477da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
1478da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	result = do_sysctl(compat_ptr(tmp.name), tmp.nlen,
147926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman			   compat_ptr(tmp.oldval), oldlen,
1480da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman			   compat_ptr(tmp.newval), tmp.newlen);
1481da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
148226a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (result >= 0) {
148326a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		oldlen = result;
148426a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		result = 0;
1485da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	}
1486da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
148726a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman	if (compat_oldlenp && put_user(oldlen, compat_oldlenp))
148826a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman		return -EFAULT;
148926a7034b40ba80f82f64fa251a2cbf49f9971c6aEric W. Biederman
1490da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman	return result;
1491da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman}
1492da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman
1493da3f6f9b3e0d1e73975ca81ae124406bf1587d40Eric W. Biederman#endif /* CONFIG_COMPAT */
1494