1 /* $OpenBSD: sysctl.h,v 1.91 2007/04/12 22:14:15 tedu Exp $ */
2 /* $NetBSD: sysctl.h,v 1.16 1996/04/09 20:55:36 cgd Exp $ */
3
4 /*
5 * Copyright (c) 1989, 1993
6 * The Regents of the University of California. All rights reserved.
7 *
8 * This code is derived from software contributed to Berkeley by
9 * Mike Karels at Berkeley Software Design, Inc.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * @(#)sysctl.h 8.2 (Berkeley) 3/30/95
36 */
37
38 #ifndef _SYS_SYSCTL_H_
39 #define _SYS_SYSCTL_H_
40
41 /*
42 * These are for the eproc structure defined below.
43 */
44 #ifndef _KERNEL
45 #include <sys/time.h>
46 #include <sys/ucred.h>
47 #include <sys/proc.h>
48 #include <sys/resource.h>
49 #endif
50
51 #include <sys/resourcevar.h> /* XXX */
52
53 #include <uvm/uvm_extern.h>
54
55 /*
56 * Definitions for sysctl call. The sysctl call uses a hierarchical name
57 * for objects that can be examined or modified. The name is expressed as
58 * a sequence of integers. Like a file path name, the meaning of each
59 * component depends on its place in the hierarchy. The top-level and kern
60 * identifiers are defined here, and other identifiers are defined in the
61 * respective subsystem header files.
62 */
63
64 #define CTL_MAXNAME 12 /* largest number of components supported */
65
66 /*
67 * Each subsystem defined by sysctl defines a list of variables
68 * for that subsystem. Each name is either a node with further
69 * levels defined below it, or it is a leaf of some particular
70 * type given below. Each sysctl level defines a set of name/type
71 * pairs to be used by sysctl(1) in manipulating the subsystem.
72 */
73 struct ctlname {
74 char *ctl_name; /* subsystem name */
75 int ctl_type; /* type of name */
76 };
77 #define CTLTYPE_NODE 1 /* name is a node */
78 #define CTLTYPE_INT 2 /* name describes an integer */
79 #define CTLTYPE_STRING 3 /* name describes a string */
80 #define CTLTYPE_QUAD 4 /* name describes a 64-bit number */
81 #define CTLTYPE_STRUCT 5 /* name describes a structure */
82
83 /*
84 * Top-level identifiers
85 */
86 #define CTL_UNSPEC 0 /* unused */
87 #define CTL_KERN 1 /* "high kernel": proc, limits */
88 #define CTL_VM 2 /* virtual memory */
89 #define CTL_FS 3 /* file system, mount type is next */
90 #define CTL_NET 4 /* network, see socket.h */
91 #define CTL_DEBUG 5 /* debugging parameters */
92 #define CTL_HW 6 /* generic cpu/io */
93 #define CTL_MACHDEP 7 /* machine dependent */
94 #define CTL_USER 8 /* user-level */
95 #define CTL_DDB 9 /* DDB user interface, see db_var.h */
96 #define CTL_VFS 10 /* VFS sysctl's */
97 #define CTL_MAXID 11 /* number of valid top-level ids */
98
99 #define CTL_NAMES { \
100 { 0, 0 }, \
101 { "kern", CTLTYPE_NODE }, \
102 { "vm", CTLTYPE_NODE }, \
103 { "fs", CTLTYPE_NODE }, \
104 { "net", CTLTYPE_NODE }, \
105 { "debug", CTLTYPE_NODE }, \
106 { "hw", CTLTYPE_NODE }, \
107 { "machdep", CTLTYPE_NODE }, \
108 { "user", CTLTYPE_NODE }, \
109 { "ddb", CTLTYPE_NODE }, \
110 { "vfs", CTLTYPE_NODE }, \
111 }
112
113 /*
114 * CTL_KERN identifiers
115 */
116 #define KERN_OSTYPE 1 /* string: system version */
117 #define KERN_OSRELEASE 2 /* string: system release */
118 #define KERN_OSREV 3 /* int: system revision */
119 #define KERN_VERSION 4 /* string: compile time info */
120 #define KERN_MAXVNODES 5 /* int: max vnodes */
121 #define KERN_MAXPROC 6 /* int: max processes */
122 #define KERN_MAXFILES 7 /* int: max open files */
123 #define KERN_ARGMAX 8 /* int: max arguments to exec */
124 #define KERN_SECURELVL 9 /* int: system security level */
125 #define KERN_HOSTNAME 10 /* string: hostname */
126 #define KERN_HOSTID 11 /* int: host identifier */
127 #define KERN_CLOCKRATE 12 /* struct: struct clockinfo */
128 #define KERN_VNODE 13 /* struct: vnode structures */
129 #define KERN_PROC 14 /* struct: process entries */
130 #define KERN_FILE 15 /* struct: file entries */
131 #define KERN_PROF 16 /* node: kernel profiling info */
132 #define KERN_POSIX1 17 /* int: POSIX.1 version */
133 #define KERN_NGROUPS 18 /* int: # of supplemental group ids */
134 #define KERN_JOB_CONTROL 19 /* int: is job control available */
135 #define KERN_SAVED_IDS 20 /* int: saved set-user/group-ID */
136 #define KERN_BOOTTIME 21 /* struct: time kernel was booted */
137 #define KERN_DOMAINNAME 22 /* string: (YP) domainname */
138 #define KERN_MAXPARTITIONS 23 /* int: number of partitions/disk */
139 #define KERN_RAWPARTITION 24 /* int: raw partition number */
140 /*define gap 25 */
141 /*define gap 26 */
142 #define KERN_OSVERSION 27 /* string: kernel build version */
143 #define KERN_SOMAXCONN 28 /* int: listen queue maximum */
144 #define KERN_SOMINCONN 29 /* int: half-open controllable param */
145 #define KERN_USERMOUNT 30 /* int: users may mount filesystems */
146 #define KERN_RND 31 /* struct: rnd(4) statistics */
147 #define KERN_NOSUIDCOREDUMP 32 /* int: no setuid coredumps ever */
148 #define KERN_FSYNC 33 /* int: file synchronization support */
149 #define KERN_SYSVMSG 34 /* int: SysV message queue suppoprt */
150 #define KERN_SYSVSEM 35 /* int: SysV semaphore support */
151 #define KERN_SYSVSHM 36 /* int: SysV shared memory support */
152 #define KERN_ARND 37 /* int: random integer from arc4rnd */
153 #define KERN_MSGBUFSIZE 38 /* int: size of message buffer */
154 #define KERN_MALLOCSTATS 39 /* node: malloc statistics */
155 #define KERN_CPTIME 40 /* array: cp_time */
156 #define KERN_NCHSTATS 41 /* struct: vfs cache statistics */
157 #define KERN_FORKSTAT 42 /* struct: fork statistics */
158 #define KERN_NSELCOLL 43 /* int: select(2) collisions */
159 #define KERN_TTY 44 /* node: tty information */
160 #define KERN_CCPU 45 /* int: ccpu */
161 #define KERN_FSCALE 46 /* int: fscale */
162 #define KERN_NPROCS 47 /* int: number of processes */
163 #define KERN_MSGBUF 48 /* message buffer, KERN_MSGBUFSIZE */
164 #define KERN_POOL 49 /* struct: pool information */
165 #define KERN_STACKGAPRANDOM 50 /* int: stackgap_random */
166 #define KERN_SYSVIPC_INFO 51 /* struct: SysV sem/shm/msg info */
167 #define KERN_USERCRYPTO 52 /* int: usercrypto */
168 #define KERN_CRYPTODEVALLOWSOFT 53 /* int: cryptodevallowsoft */
169 #define KERN_SPLASSERT 54 /* int: splassert */
170 #define KERN_PROC_ARGS 55 /* node: proc args and env */
171 #define KERN_NFILES 56 /* int: number of open files */
172 #define KERN_TTYCOUNT 57 /* int: number of tty devices */
173 #define KERN_NUMVNODES 58 /* int: number of vnodes in use */
174 #define KERN_MBSTAT 59 /* struct: mbuf statistics */
175 #define KERN_USERASYMCRYPTO 60 /* int: usercrypto */
176 #define KERN_SEMINFO 61 /* struct: SysV struct seminfo */
177 #define KERN_SHMINFO 62 /* struct: SysV struct shminfo */
178 #define KERN_INTRCNT 63 /* node: interrupt counters */
179 #define KERN_WATCHDOG 64 /* node: watchdog */
180 #define KERN_EMUL 65 /* node: emuls */
181 #define KERN_PROC2 66 /* struct: process entries */
182 #define KERN_MAXCLUSTERS 67 /* number of mclusters */
183 #define KERN_EVCOUNT 68 /* node: event counters */
184 #define KERN_TIMECOUNTER 69 /* node: timecounter */
185 #define KERN_MAXLOCKSPERUID 70 /* int: locks per uid */
186 #define KERN_CPTIME2 71 /* array: cp_time2 */
187 #define KERN_MAXID 72 /* number of valid kern ids */
188
189 #define CTL_KERN_NAMES { \
190 { 0, 0 }, \
191 { "ostype", CTLTYPE_STRING }, \
192 { "osrelease", CTLTYPE_STRING }, \
193 { "osrevision", CTLTYPE_INT }, \
194 { "version", CTLTYPE_STRING }, \
195 { "maxvnodes", CTLTYPE_INT }, \
196 { "maxproc", CTLTYPE_INT }, \
197 { "maxfiles", CTLTYPE_INT }, \
198 { "argmax", CTLTYPE_INT }, \
199 { "securelevel", CTLTYPE_INT }, \
200 { "hostname", CTLTYPE_STRING }, \
201 { "hostid", CTLTYPE_INT }, \
202 { "clockrate", CTLTYPE_STRUCT }, \
203 { "vnode", CTLTYPE_STRUCT }, \
204 { "proc", CTLTYPE_STRUCT }, \
205 { "file", CTLTYPE_STRUCT }, \
206 { "profiling", CTLTYPE_NODE }, \
207 { "posix1version", CTLTYPE_INT }, \
208 { "ngroups", CTLTYPE_INT }, \
209 { "job_control", CTLTYPE_INT }, \
210 { "saved_ids", CTLTYPE_INT }, \
211 { "boottime", CTLTYPE_STRUCT }, \
212 { "domainname", CTLTYPE_STRING }, \
213 { "maxpartitions", CTLTYPE_INT }, \
214 { "rawpartition", CTLTYPE_INT }, \
215 { "gap", 0 }, \
216 { "gap", 0 }, \
217 { "osversion", CTLTYPE_STRING }, \
218 { "somaxconn", CTLTYPE_INT }, \
219 { "sominconn", CTLTYPE_INT }, \
220 { "usermount", CTLTYPE_INT }, \
221 { "random", CTLTYPE_STRUCT }, \
222 { "nosuidcoredump", CTLTYPE_INT }, \
223 { "fsync", CTLTYPE_INT }, \
224 { "sysvmsg", CTLTYPE_INT }, \
225 { "sysvsem", CTLTYPE_INT }, \
226 { "sysvshm", CTLTYPE_INT }, \
227 { "arandom", CTLTYPE_INT }, \
228 { "msgbufsize", CTLTYPE_INT }, \
229 { "malloc", CTLTYPE_NODE }, \
230 { "cp_time", CTLTYPE_STRUCT }, \
231 { "nchstats", CTLTYPE_STRUCT }, \
232 { "forkstat", CTLTYPE_STRUCT }, \
233 { "nselcoll", CTLTYPE_INT }, \
234 { "tty", CTLTYPE_NODE }, \
235 { "ccpu", CTLTYPE_INT }, \
236 { "fscale", CTLTYPE_INT }, \
237 { "nprocs", CTLTYPE_INT }, \
238 { "msgbuf", CTLTYPE_STRUCT }, \
239 { "pool", CTLTYPE_NODE }, \
240 { "stackgap_random", CTLTYPE_INT }, \
241 { "sysvipc_info", CTLTYPE_INT }, \
242 { "usercrypto", CTLTYPE_INT }, \
243 { "cryptodevallowsoft", CTLTYPE_INT }, \
244 { "splassert", CTLTYPE_INT }, \
245 { "procargs", CTLTYPE_NODE }, \
246 { "nfiles", CTLTYPE_INT }, \
247 { "ttycount", CTLTYPE_INT }, \
248 { "numvnodes", CTLTYPE_INT }, \
249 { "mbstat", CTLTYPE_STRUCT }, \
250 { "userasymcrypto", CTLTYPE_INT }, \
251 { "seminfo", CTLTYPE_STRUCT }, \
252 { "shminfo", CTLTYPE_STRUCT }, \
253 { "intrcnt", CTLTYPE_NODE }, \
254 { "watchdog", CTLTYPE_NODE }, \
255 { "emul", CTLTYPE_NODE }, \
256 { "proc2", CTLTYPE_STRUCT }, \
257 { "maxclusters", CTLTYPE_INT }, \
258 { "evcount", CTLTYPE_NODE }, \
259 { "timecounter", CTLTYPE_NODE }, \
260 { "maxlocksperuid", CTLTYPE_INT }, \
261 { "cp_time2", CTLTYPE_STRUCT }, \
262 }
263
264 /*
265 * KERN_EMUL subtypes.
266 */
267 #define KERN_EMUL_NUM 0
268 /* Fourth level sysctl names */
269 #define KERN_EMUL_NAME 0
270 #define KERN_EMUL_ENABLED 1
271
272
273 /*
274 * KERN_PROC subtypes
275 */
276 #define KERN_PROC_ALL 0 /* everything but kernel threads */
277 #define KERN_PROC_PID 1 /* by process id */
278 #define KERN_PROC_PGRP 2 /* by process group id */
279 #define KERN_PROC_SESSION 3 /* by session of pid */
280 #define KERN_PROC_TTY 4 /* by controlling tty */
281 #define KERN_PROC_UID 5 /* by effective uid */
282 #define KERN_PROC_RUID 6 /* by real uid */
283 #define KERN_PROC_KTHREAD 7 /* also return kernel threads */
284
285 /*
286 * KERN_SYSVIPC_INFO subtypes
287 */
288 #define KERN_SYSVIPC_MSG_INFO 1 /* msginfo and msqid_ds */
289 #define KERN_SYSVIPC_SEM_INFO 2 /* seminfo and semid_ds */
290 #define KERN_SYSVIPC_SHM_INFO 3 /* shminfo and shmid_ds */
291
292 /*
293 * KERN_PROC_ARGS subtypes
294 */
295 #define KERN_PROC_ARGV 1
296 #define KERN_PROC_NARGV 2
297 #define KERN_PROC_ENV 3
298 #define KERN_PROC_NENV 4
299
300 /*
301 * KERN_PROC subtype ops return arrays of augmented proc structures:
302 */
303 struct kinfo_proc {
304 struct proc kp_proc; /* proc structure */
305 struct eproc {
306 struct proc *e_paddr; /* address of proc */
307 struct session *e_sess; /* session pointer */
308 struct pcred e_pcred; /* process credentials */
309 struct ucred e_ucred; /* current credentials */
310 struct vmspace e_vm; /* address space */
311 struct pstats e_pstats; /* process stats */
312 int e_pstats_valid; /* pstats valid? */
313 pid_t e_ppid; /* parent process id */
314 pid_t e_pgid; /* process group id */
315 short e_jobc; /* job control counter */
316 dev_t e_tdev; /* controlling tty dev */
317 pid_t e_tpgid; /* tty process group id */
318 struct session *e_tsess; /* tty session pointer */
319 #define WMESGLEN 7
320 char e_wmesg[WMESGLEN+1]; /* wchan message */
321 segsz_t e_xsize; /* text size */
322 short e_xrssize; /* text rss */
323 short e_xccount; /* text references */
324 short e_xswrss;
325 long e_flag;
326 #define EPROC_CTTY 0x01 /* controlling tty vnode active */
327 #define EPROC_SLEADER 0x02 /* session leader */
328 char e_login[MAXLOGNAME]; /* setlogin() name */
329 #define EMULNAMELEN 7
330 char e_emul[EMULNAMELEN+1]; /* syscall emulation name */
331 rlim_t e_maxrss;
332 struct plimit *e_limit;
333 } kp_eproc;
334 };
335
336 /*
337 * KERN_PROC2 subtype ops return arrays of relatively fixed size
338 * structures of process info. Use 8 byte alignment, and new
339 * elements should only be added to the end of this structure so
340 * binary compatibility can be preserved.
341 */
342 #define KI_NGROUPS 16
343 #define KI_MAXCOMLEN 24 /* extra for 8 byte alignment */
344 #define KI_WMESGLEN 8
345 #define KI_MAXLOGNAME 32
346 #define KI_EMULNAMELEN 8
347
348 #define KI_NOCPU (~(u_int64_t)0)
349
350 struct kinfo_proc2 {
351 u_int64_t p_forw; /* PTR: linked run/sleep queue. */
352 u_int64_t p_back;
353 u_int64_t p_paddr; /* PTR: address of proc */
354
355 u_int64_t p_addr; /* PTR: Kernel virtual addr of u-area */
356 u_int64_t p_fd; /* PTR: Ptr to open files structure. */
357 u_int64_t p_stats; /* PTR: Accounting/statistics */
358 u_int64_t p_limit; /* PTR: Process limits. */
359 u_int64_t p_vmspace; /* PTR: Address space. */
360 u_int64_t p_sigacts; /* PTR: Signal actions, state */
361 u_int64_t p_sess; /* PTR: session pointer */
362 u_int64_t p_tsess; /* PTR: tty session pointer */
363 u_int64_t p_ru; /* PTR: Exit information. XXX */
364
365 int32_t p_eflag; /* LONG: extra kinfo_proc2 flags */
366 int32_t p_exitsig; /* INT: signal to sent to parent on exit */
367 int32_t p_flag; /* INT: P_* flags. */
368
369 int32_t p_pid; /* PID_T: Process identifier. */
370 int32_t p_ppid; /* PID_T: Parent process id */
371 int32_t p_sid; /* PID_T: session id */
372 int32_t p__pgid; /* PID_T: process group id */
373 /* XXX: <sys/proc.h> hijacks p_pgid */
374 int32_t p_tpgid; /* PID_T: tty process group id */
375
376 u_int32_t p_uid; /* UID_T: effective user id */
377 u_int32_t p_ruid; /* UID_T: real user id */
378 u_int32_t p_gid; /* GID_T: effective group id */
379 u_int32_t p_rgid; /* GID_T: real group id */
380
381 u_int32_t p_groups[KI_NGROUPS]; /* GID_T: groups */
382 int16_t p_ngroups; /* SHORT: number of groups */
383
384 int16_t p_jobc; /* SHORT: job control counter */
385 u_int32_t p_tdev; /* DEV_T: controlling tty dev */
386
387 u_int32_t p_estcpu; /* U_INT: Time averaged value of p_cpticks. */
388 u_int32_t p_rtime_sec; /* STRUCT TIMEVAL: Real time. */
389 u_int32_t p_rtime_usec; /* STRUCT TIMEVAL: Real time. */
390 int32_t p_cpticks; /* INT: Ticks of cpu time. */
391 u_int32_t p_pctcpu; /* FIXPT_T: %cpu for this process during p_swtime */
392 u_int32_t p_swtime; /* U_INT: Time swapped in or out. */
393 u_int32_t p_slptime; /* U_INT: Time since last blocked. */
394 int32_t p_schedflags; /* INT: PSCHED_* flags */
395
396 u_int64_t p_uticks; /* U_QUAD_T: Statclock hits in user mode. */
397 u_int64_t p_sticks; /* U_QUAD_T: Statclock hits in system mode. */
398 u_int64_t p_iticks; /* U_QUAD_T: Statclock hits processing intr. */
399
400 u_int64_t p_tracep; /* PTR: Trace to vnode or file */
401 int32_t p_traceflag; /* INT: Kernel trace points. */
402
403 int32_t p_holdcnt; /* INT: If non-zero, don't swap. */
404
405 int32_t p_siglist; /* INT: Signals arrived but not delivered. */
406 u_int32_t p_sigmask; /* SIGSET_T: Current signal mask. */
407 u_int32_t p_sigignore; /* SIGSET_T: Signals being ignored. */
408 u_int32_t p_sigcatch; /* SIGSET_T: Signals being caught by user. */
409
410 int8_t p_stat; /* CHAR: S* process status (from LWP). */
411 u_int8_t p_priority; /* U_CHAR: Process priority. */
412 u_int8_t p_usrpri; /* U_CHAR: User-priority based on p_cpu and p_nice. */
413 u_int8_t p_nice; /* U_CHAR: Process "nice" value. */
414
415 u_int16_t p_xstat; /* U_SHORT: Exit status for wait; also stop signal. */
416 u_int16_t p_acflag; /* U_SHORT: Accounting flags. */
417
418 char p_comm[KI_MAXCOMLEN];
419
420 char p_wmesg[KI_WMESGLEN]; /* wchan message */
421 u_int64_t p_wchan; /* PTR: sleep address. */
422
423 char p_login[KI_MAXLOGNAME]; /* setlogin() name */
424
425 int32_t p_vm_rssize; /* SEGSZ_T: current resident set size in pages */
426 int32_t p_vm_tsize; /* SEGSZ_T: text size (pages) */
427 int32_t p_vm_dsize; /* SEGSZ_T: data size (pages) */
428 int32_t p_vm_ssize; /* SEGSZ_T: stack size (pages) */
429
430 int64_t p_uvalid; /* CHAR: following p_u* members from struct user are valid */
431 /* XXX 64 bits for alignment */
432 u_int32_t p_ustart_sec; /* STRUCT TIMEVAL: starting time. */
433 u_int32_t p_ustart_usec; /* STRUCT TIMEVAL: starting time. */
434
435 u_int32_t p_uutime_sec; /* STRUCT TIMEVAL: user time. */
436 u_int32_t p_uutime_usec; /* STRUCT TIMEVAL: user time. */
437 u_int32_t p_ustime_sec; /* STRUCT TIMEVAL: system time. */
438 u_int32_t p_ustime_usec; /* STRUCT TIMEVAL: system time. */
439
440 u_int64_t p_uru_maxrss; /* LONG: max resident set size. */
441 u_int64_t p_uru_ixrss; /* LONG: integral shared memory size. */
442 u_int64_t p_uru_idrss; /* LONG: integral unshared data ". */
443 u_int64_t p_uru_isrss; /* LONG: integral unshared stack ". */
444 u_int64_t p_uru_minflt; /* LONG: page reclaims. */
445 u_int64_t p_uru_majflt; /* LONG: page faults. */
446 u_int64_t p_uru_nswap; /* LONG: swaps. */
447 u_int64_t p_uru_inblock; /* LONG: block input operations. */
448 u_int64_t p_uru_oublock; /* LONG: block output operations. */
449 u_int64_t p_uru_msgsnd; /* LONG: messages sent. */
450 u_int64_t p_uru_msgrcv; /* LONG: messages received. */
451 u_int64_t p_uru_nsignals; /* LONG: signals received. */
452 u_int64_t p_uru_nvcsw; /* LONG: voluntary context switches. */
453 u_int64_t p_uru_nivcsw; /* LONG: involuntary ". */
454
455 u_int32_t p_uctime_sec; /* STRUCT TIMEVAL: child u+s time. */
456 u_int32_t p_uctime_usec; /* STRUCT TIMEVAL: child u+s time. */
457 u_int64_t p_realflag; /* INT: P_* flags (not including LWPs). */
458 u_int32_t p_svuid; /* UID_T: saved user id */
459 u_int32_t p_svgid; /* GID_T: saved group id */
460 char p_emul[KI_EMULNAMELEN]; /* syscall emulation name */
461 u_int64_t p_rlim_rss_cur; /* RLIM_T: soft limit for rss */
462 u_int64_t p_cpuid; /* LONG: CPU id */
463 u_int64_t p_vm_map_size; /* VSIZE_T: virtual size */
464 };
465
466 /*
467 * KERN_INTRCNT
468 */
469 #define KERN_INTRCNT_NUM 1 /* int: # intrcnt */
470 #define KERN_INTRCNT_CNT 2 /* node: intrcnt */
471 #define KERN_INTRCNT_NAME 3 /* node: names */
472 #define KERN_INTRCNT_VECTOR 4 /* node: interrupt vector # */
473 #define KERN_INTRCNT_MAXID 5
474
475 #define CTL_KERN_INTRCNT_NAMES { \
476 { 0, 0 }, \
477 { "nintrcnt", CTLTYPE_INT }, \
478 { "intrcnt", CTLTYPE_NODE }, \
479 { "intrname", CTLTYPE_NODE }, \
480 }
481
482 /*
483 * KERN_WATCHDOG
484 */
485 #define KERN_WATCHDOG_PERIOD 1 /* int: watchdog period */
486 #define KERN_WATCHDOG_AUTO 2 /* int: automatic tickle */
487 #define KERN_WATCHDOG_MAXID 3
488
489 #define CTL_KERN_WATCHDOG_NAMES { \
490 { 0, 0 }, \
491 { "period", CTLTYPE_INT }, \
492 { "auto", CTLTYPE_INT }, \
493 }
494
495 /*
496 * KERN_TIMECOUNTER
497 */
498 #define KERN_TIMECOUNTER_TICK 1 /* int: number of revolutions */
499 #define KERN_TIMECOUNTER_TIMESTEPWARNINGS 2 /* int: log a warning when time changes */
500 #define KERN_TIMECOUNTER_HARDWARE 3 /* string: tick hardware used */
501 #define KERN_TIMECOUNTER_CHOICE 4 /* string: tick hardware used */
502 #define KERN_TIMECOUNTER_MAXID 5
503
504 #define CTL_KERN_TIMECOUNTER_NAMES { \
505 { 0, 0 }, \
506 { "tick", CTLTYPE_INT }, \
507 { "timestepwarnings", CTLTYPE_INT }, \
508 { "hardware", CTLTYPE_STRING }, \
509 { "choice", CTLTYPE_STRING }, \
510 }
511
512 /*
513 * CTL_FS identifiers
514 */
515 #define FS_POSIX 1 /* POSIX flags */
516 #define FS_MAXID 2
517
518 #define CTL_FS_NAMES { \
519 { 0, 0 }, \
520 { "posix", CTLTYPE_NODE }, \
521 }
522
523 /*
524 * CTL_FS identifiers
525 */
526 #define FS_POSIX_SETUID 1 /* int: always clear SGID/SUID bit when owner change */
527 #define FS_POSIX_MAXID 2
528
529 #define CTL_FS_POSIX_NAMES { \
530 { 0, 0 }, \
531 { "setuid", CTLTYPE_INT }, \
532 }
533
534 /*
535 * CTL_HW identifiers
536 */
537 #define HW_MACHINE 1 /* string: machine class */
538 #define HW_MODEL 2 /* string: specific machine model */
539 #define HW_NCPU 3 /* int: number of cpus */
540 #define HW_BYTEORDER 4 /* int: machine byte order */
541 #define HW_PHYSMEM 5 /* int: total memory */
542 #define HW_USERMEM 6 /* int: non-kernel memory */
543 #define HW_PAGESIZE 7 /* int: software page size */
544 #define HW_DISKNAMES 8 /* strings: disk drive names */
545 #define HW_DISKSTATS 9 /* struct: diskstats[] */
546 #define HW_DISKCOUNT 10 /* int: number of disks */
547 #define HW_SENSORS 11 /* node: hardware monitors */
548 #define HW_CPUSPEED 12 /* get CPU frequency */
549 #define HW_SETPERF 13 /* set CPU performance % */
550 #define HW_VENDOR 14 /* string: vendor name */
551 #define HW_PRODUCT 15 /* string: product name */
552 #define HW_VERSION 16 /* string: hardware version */
553 #define HW_SERIALNO 17 /* string: hardware serial number */
554 #define HW_UUID 18 /* string: universal unique id */
555 #define HW_MAXID 19 /* number of valid hw ids */
556
557 #define CTL_HW_NAMES { \
558 { 0, 0 }, \
559 { "machine", CTLTYPE_STRING }, \
560 { "model", CTLTYPE_STRING }, \
561 { "ncpu", CTLTYPE_INT }, \
562 { "byteorder", CTLTYPE_INT }, \
563 { "physmem", CTLTYPE_INT }, \
564 { "usermem", CTLTYPE_INT }, \
565 { "pagesize", CTLTYPE_INT }, \
566 { "disknames", CTLTYPE_STRING }, \
567 { "diskstats", CTLTYPE_STRUCT }, \
568 { "diskcount", CTLTYPE_INT }, \
569 { "sensors", CTLTYPE_NODE}, \
570 { "cpuspeed", CTLTYPE_INT }, \
571 { "setperf", CTLTYPE_INT }, \
572 { "vendor", CTLTYPE_STRING }, \
573 { "product", CTLTYPE_STRING }, \
574 { "version", CTLTYPE_STRING }, \
575 { "serialno", CTLTYPE_STRING }, \
576 { "uuid", CTLTYPE_STRING }, \
577 }
578
579 /*
580 * CTL_USER definitions
581 */
582 #define USER_CS_PATH 1 /* string: _CS_PATH */
583 #define USER_BC_BASE_MAX 2 /* int: BC_BASE_MAX */
584 #define USER_BC_DIM_MAX 3 /* int: BC_DIM_MAX */
585 #define USER_BC_SCALE_MAX 4 /* int: BC_SCALE_MAX */
586 #define USER_BC_STRING_MAX 5 /* int: BC_STRING_MAX */
587 #define USER_COLL_WEIGHTS_MAX 6 /* int: COLL_WEIGHTS_MAX */
588 #define USER_EXPR_NEST_MAX 7 /* int: EXPR_NEST_MAX */
589 #define USER_LINE_MAX 8 /* int: LINE_MAX */
590 #define USER_RE_DUP_MAX 9 /* int: RE_DUP_MAX */
591 #define USER_POSIX2_VERSION 10 /* int: POSIX2_VERSION */
592 #define USER_POSIX2_C_BIND 11 /* int: POSIX2_C_BIND */
593 #define USER_POSIX2_C_DEV 12 /* int: POSIX2_C_DEV */
594 #define USER_POSIX2_CHAR_TERM 13 /* int: POSIX2_CHAR_TERM */
595 #define USER_POSIX2_FORT_DEV 14 /* int: POSIX2_FORT_DEV */
596 #define USER_POSIX2_FORT_RUN 15 /* int: POSIX2_FORT_RUN */
597 #define USER_POSIX2_LOCALEDEF 16 /* int: POSIX2_LOCALEDEF */
598 #define USER_POSIX2_SW_DEV 17 /* int: POSIX2_SW_DEV */
599 #define USER_POSIX2_UPE 18 /* int: POSIX2_UPE */
600 #define USER_STREAM_MAX 19 /* int: POSIX2_STREAM_MAX */
601 #define USER_TZNAME_MAX 20 /* int: POSIX2_TZNAME_MAX */
602 #define USER_MAXID 21 /* number of valid user ids */
603
604 #define CTL_USER_NAMES { \
605 { 0, 0 }, \
606 { "cs_path", CTLTYPE_STRING }, \
607 { "bc_base_max", CTLTYPE_INT }, \
608 { "bc_dim_max", CTLTYPE_INT }, \
609 { "bc_scale_max", CTLTYPE_INT }, \
610 { "bc_string_max", CTLTYPE_INT }, \
611 { "coll_weights_max", CTLTYPE_INT }, \
612 { "expr_nest_max", CTLTYPE_INT }, \
613 { "line_max", CTLTYPE_INT }, \
614 { "re_dup_max", CTLTYPE_INT }, \
615 { "posix2_version", CTLTYPE_INT }, \
616 { "posix2_c_bind", CTLTYPE_INT }, \
617 { "posix2_c_dev", CTLTYPE_INT }, \
618 { "posix2_char_term", CTLTYPE_INT }, \
619 { "posix2_fort_dev", CTLTYPE_INT }, \
620 { "posix2_fort_run", CTLTYPE_INT }, \
621 { "posix2_localedef", CTLTYPE_INT }, \
622 { "posix2_sw_dev", CTLTYPE_INT }, \
623 { "posix2_upe", CTLTYPE_INT }, \
624 { "stream_max", CTLTYPE_INT }, \
625 { "tzname_max", CTLTYPE_INT }, \
626 }
627
628 /*
629 * CTL_DEBUG definitions
630 *
631 * Second level identifier specifies which debug variable.
632 * Third level identifier specifies which structure component.
633 */
634 #define CTL_DEBUG_NAME 0 /* string: variable name */
635 #define CTL_DEBUG_VALUE 1 /* int: variable value */
636 #define CTL_DEBUG_MAXID 20
637
638 #ifdef _KERNEL
639 #ifdef DEBUG
640 /*
641 * CTL_DEBUG variables.
642 *
643 * These are declared as separate variables so that they can be
644 * individually initialized at the location of their associated
645 * variable. The loader prevents multiple use by issuing errors
646 * if a variable is initialized in more than one place. They are
647 * aggregated into an array in debug_sysctl(), so that it can
648 * conveniently locate them when querried. If more debugging
649 * variables are added, they must also be declared here and also
650 * entered into the array.
651 */
652 struct ctldebug {
653 char *debugname; /* name of debugging variable */
654 int *debugvar; /* pointer to debugging variable */
655 };
656 extern struct ctldebug debug0, debug1, debug2, debug3, debug4;
657 extern struct ctldebug debug5, debug6, debug7, debug8, debug9;
658 extern struct ctldebug debug10, debug11, debug12, debug13, debug14;
659 extern struct ctldebug debug15, debug16, debug17, debug18, debug19;
660 #endif /* DEBUG */
661
662 /*
663 * Internal sysctl function calling convention:
664 *
665 * (*sysctlfn)(name, namelen, oldval, oldlenp, newval, newlen);
666 *
667 * The name parameter points at the next component of the name to be
668 * interpreted. The namelen parameter is the number of integers in
669 * the name.
670 */
671 typedef int (sysctlfn)(int *, u_int, void *, size_t *, void *, size_t, struct proc *);
672
673 int sysctl_int(void *, size_t *, void *, size_t, int *);
674 int sysctl_int_lower(void *, size_t *, void *, size_t, int *);
675 int sysctl_rdint(void *, size_t *, void *, int);
676 int sysctl_int_arr(int **, int *, u_int, void *, size_t *, void *, size_t);
677 int sysctl_quad(void *, size_t *, void *, size_t, int64_t *);
678 int sysctl_rdquad(void *, size_t *, void *, int64_t);
679 int sysctl_string(void *, size_t *, void *, size_t, char *, int);
680 int sysctl_tstring(void *, size_t *, void *, size_t, char *, int);
681 int sysctl__string(void *, size_t *, void *, size_t, char *, int, int);
682 int sysctl_rdstring(void *, size_t *, void *, const char *);
683 int sysctl_rdstruct(void *, size_t *, void *, const void *, int);
684 int sysctl_struct(void *, size_t *, void *, size_t, void *, int);
685 int sysctl_file(char *, size_t *);
686 int sysctl_doproc(int *, u_int, char *, size_t *);
687 struct radix_node;
688 struct walkarg;
689 int sysctl_dumpentry(struct radix_node *, void *);
690 int sysctl_iflist(int, struct walkarg *);
691 int sysctl_rtable(int *, u_int, void *, size_t *, void *, size_t);
692 int sysctl_clockrate(char *, size_t *);
693 int sysctl_vnode(char *, size_t *, struct proc *);
694 #ifdef GPROF
695 int sysctl_doprof(int *, u_int, void *, size_t *, void *, size_t);
696 #endif
697 int sysctl_dopool(int *, u_int, char *, size_t *);
698
699 void fill_eproc(struct proc *, struct eproc *);
700 void fill_kproc2(struct proc *, struct kinfo_proc2 *);
701
702 int kern_sysctl(int *, u_int, void *, size_t *, void *, size_t,
703 struct proc *);
704 int hw_sysctl(int *, u_int, void *, size_t *, void *, size_t,
705 struct proc *);
706 #ifdef DEBUG
707 int debug_sysctl(int *, u_int, void *, size_t *, void *, size_t,
708 struct proc *);
709 #endif
710 int vm_sysctl(int *, u_int, void *, size_t *, void *, size_t,
711 struct proc *);
712 int fs_sysctl(int *, u_int, void *, size_t *, void *, size_t,
713 struct proc *);
714 int fs_posix_sysctl(int *, u_int, void *, size_t *, void *, size_t,
715 struct proc *);
716 int net_sysctl(int *, u_int, void *, size_t *, void *, size_t,
717 struct proc *);
718 int cpu_sysctl(int *, u_int, void *, size_t *, void *, size_t,
719 struct proc *);
720 int vfs_sysctl(int *, u_int, void *, size_t *, void *, size_t,
721 struct proc *);
722 int sysctl_sysvipc(int *, u_int, void *, size_t *);
723 int sysctl_wdog(int *, u_int, void *, size_t *, void *, size_t);
724
725 extern int (*cpu_cpuspeed)(int *);
726 extern void (*cpu_setperf)(int);
727
728 int bpf_sysctl(int *, u_int, void *, size_t *, void *, size_t);
729
730 #else /* !_KERNEL */
731 #include <sys/cdefs.h>
732
733 __BEGIN_DECLS
734 int sysctl(int *, u_int, void *, size_t *, void *, size_t);
735 __END_DECLS
736 #endif /* _KERNEL */
737 #endif /* !_SYS_SYSCTL_H_ */