xref: /original-bsd/sys/sys/sysctl.h (revision 4670e840)
1 /*
2  * Copyright (c) 1989, 1993 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Mike Karels at Berkeley Software Design, Inc.
7  *
8  * %sccs.include.redist.c%
9  *
10  *	@(#)sysctl.h	7.16 (Berkeley) 03/04/93
11  */
12 
13 /*
14  * Definitions for sysctl call.  The sysctl call uses a hierarchical name
15  * for objects that can be examined or modified.  The name is expressed as
16  * a sequence of integers.  Like a file path name, the meaning of each
17  * component depends on its place in the hierarchy.  The top-level and kern
18  * identifiers are defined here, and other identifiers are defined in the
19  * respective subsystem header files.
20  */
21 
22 #define CTL_MAXNAME	12	/* largest number of components supported */
23 
24 /*
25  * Top-level identifiers
26  */
27 #define	CTL_UNSPEC	0		/* unused */
28 #define	CTL_KERN	1		/* "high kernel": proc, limits */
29 #define	CTL_VM		2		/* virtual memory */
30 #define	CTL_FS		3		/* file system, mount type is next */
31 #define	CTL_NET		4		/* network, see socket.h */
32 #define	CTL_DEBUG	5		/* debugging parameters */
33 #define	CTL_HW		6		/* generic cpu/io */
34 #define	CTL_MACHDEP	7		/* machine dependent */
35 #define	CTL_MAXID	8		/* number of valid top-level ids */
36 
37 #define CTL_NAMES { \
38 	"unspec", \
39 	"kern", \
40 	"vm", \
41 	"fs", \
42 	"net", \
43 	"debug", \
44 	"hw", \
45 	"machdep", \
46 }
47 
48 /*
49  * CTL_KERN identifiers
50  */
51 #define	KERN_OSTYPE	 1		/* string: system version */
52 #define	KERN_OSRELEASE	 2		/* string: system release */
53 #define	KERN_OSREV	 3		/* int: system revision */
54 #define	KERN_VERSION	 4		/* string: compile time info */
55 #define	KERN_POSIX1	 5		/* int: POSIX.1 version */
56 #define	KERN_MAXPROC	 6		/* int: max simultaneous processes */
57 #define	KERN_MAXFILES	 7		/* int: max open files */
58 #define	KERN_ARGMAX	 8		/* int: max arguments to exec */
59 #define	KERN_SECURELVL	 9		/* int: system security level */
60 #define	KERN_HOSTNAME	10		/* string: hostname */
61 #define	KERN_HOSTID	11		/* int: host identifier */
62 #define	KERN_CLOCKRATE	12		/* struct clockrate */
63 #define	KERN_VNODE	13		/* vnode structures */
64 #define	KERN_PROC	14		/* process entries */
65 #define	KERN_FILE	15		/* file entries */
66 #define	KERN_MAXID	16		/* number of valid kern ids */
67 
68 #define CTL_KERN_NAMES { \
69 	"unspec", \
70 	"ostype", \
71 	"osrelease", \
72 	"osrevision", \
73 	"version", \
74 	"posix1version", \
75 	"maxproc", \
76 	"maxfiles", \
77 	"argmax", \
78 	"securelevel", \
79 	"hostname", \
80 	"hostid", \
81 	"clockrate", \
82 	"vnode", \
83 	"proc", \
84 	"file", \
85 }
86 
87 /*
88  * KERN_PROC subtypes
89  */
90 #define KERN_PROC_ALL		0	/* everything */
91 #define	KERN_PROC_PID		1	/* by process id */
92 #define	KERN_PROC_PGRP		2	/* by process group id */
93 #define	KERN_PROC_SESSION	3	/* by session of pid */
94 #define	KERN_PROC_TTY		4	/* by controlling tty */
95 #define	KERN_PROC_UID		5	/* by effective uid */
96 #define	KERN_PROC_RUID		6	/* by real uid */
97 
98 /*
99  * CTL_HW identifiers
100  */
101 #define	HW_MACHINE	 1		/* string: machine class */
102 #define	HW_MODEL	 2		/* string: specific machine model */
103 #define	HW_NCPU		 3		/* int: number of cpus */
104 #define	HW_CPUSPEED	 4		/* int: relative cpuspeed */
105 #define	HW_PHYSMEM	 5		/* int: total memory */
106 #define	HW_USERMEM	 6		/* int: non-kernel memory */
107 #define	HW_PAGESIZE	 7		/* int: software page size */
108 #define	HW_DISKNAMES	 8		/* strings: disk drive names */
109 #define	HW_DISKSTATS	 9		/* diskstats[] */
110 #define	HW_MAXID	10		/* number of valid hw ids */
111 
112 #define CTL_HW_NAMES { \
113 	"unspec", \
114 	"machine", \
115 	"model", \
116 	"ncpu", \
117 	"cpuspeed", \
118 	"physmem", \
119 	"usermem", \
120 	"pagesize", \
121 	"disknames", \
122 	"diskstats", \
123 }
124 
125 #ifdef KERNEL
126 /*
127  * Internal sysctl function calling convention:
128  *
129  *	(*sysctlfn)(name, namelen, oldval, oldlenp, newval, newlen);
130  *
131  * The name parameter points at the next component of the name to be
132  * interpreted.  The namelen parameter is the number of integers in
133  * the name.
134  */
135 typedef int (sysctlfn)
136     __P((int *, u_int, void *, size_t *, void *, size_t, struct proc *));
137 
138 int sysctl_int __P((void *, size_t *, void *, size_t, int *));
139 int sysctl_rdint __P((void *, size_t *, void *, int));
140 int sysctl_string __P((void *, size_t *, void *, size_t, char *, int));
141 int sysctl_rdstring __P((void *, size_t *, void *, char *));
142 int sysctl_rdstruct __P((void *, size_t *, void *, void *, int));
143 
144 #else /* !KERNEL */
145 #include <sys/cdefs.h>
146 
147 __BEGIN_DECLS
148 int	sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
149 __END_DECLS
150 #endif /* KERNEL */
151