|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ ! 26: /* ! 27: * Copyright (c) 1989, 1993 ! 28: * The Regents of the University of California. All rights reserved. ! 29: * ! 30: * This code is derived from software contributed to Berkeley by ! 31: * Mike Karels at Berkeley Software Design, Inc. ! 32: * ! 33: * Redistribution and use in source and binary forms, with or without ! 34: * modification, are permitted provided that the following conditions ! 35: * are met: ! 36: * 1. Redistributions of source code must retain the above copyright ! 37: * notice, this list of conditions and the following disclaimer. ! 38: * 2. Redistributions in binary form must reproduce the above copyright ! 39: * notice, this list of conditions and the following disclaimer in the ! 40: * documentation and/or other materials provided with the distribution. ! 41: * 3. All advertising materials mentioning features or use of this software ! 42: * must display the following acknowledgement: ! 43: * This product includes software developed by the University of ! 44: * California, Berkeley and its contributors. ! 45: * 4. Neither the name of the University nor the names of its contributors ! 46: * may be used to endorse or promote products derived from this software ! 47: * without specific prior written permission. ! 48: * ! 49: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 50: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 51: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 52: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 53: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 54: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 55: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 56: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 57: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 58: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 59: * SUCH DAMAGE. ! 60: * ! 61: * @(#)sysctl.h 8.2 (Berkeley) 3/30/95 ! 62: */ ! 63: ! 64: #ifndef _SYS_SYSCTL_H_ ! 65: #define _SYS_SYSCTL_H_ ! 66: ! 67: /* ! 68: * These are for the eproc structure defined below. ! 69: */ ! 70: #ifndef _KERNEL ! 71: #include <sys/time.h> ! 72: #include <sys/ucred.h> ! 73: #include <sys/proc.h> ! 74: #include <sys/vm.h> ! 75: #endif ! 76: ! 77: /* ! 78: * Definitions for sysctl call. The sysctl call uses a hierarchical name ! 79: * for objects that can be examined or modified. The name is expressed as ! 80: * a sequence of integers. Like a file path name, the meaning of each ! 81: * component depends on its place in the hierarchy. The top-level and kern ! 82: * identifiers are defined here, and other identifiers are defined in the ! 83: * respective subsystem header files. ! 84: */ ! 85: ! 86: #define CTL_MAXNAME 12 /* largest number of components supported */ ! 87: ! 88: /* ! 89: * Each subsystem defined by sysctl defines a list of variables ! 90: * for that subsystem. Each name is either a node with further ! 91: * levels defined below it, or it is a leaf of some particular ! 92: * type given below. Each sysctl level defines a set of name/type ! 93: * pairs to be used by sysctl(1) in manipulating the subsystem. ! 94: */ ! 95: struct ctlname { ! 96: char *ctl_name; /* subsystem name */ ! 97: int ctl_type; /* type of name */ ! 98: }; ! 99: #define CTLTYPE_NODE 1 /* name is a node */ ! 100: #define CTLTYPE_INT 2 /* name describes an integer */ ! 101: #define CTLTYPE_STRING 3 /* name describes a string */ ! 102: #define CTLTYPE_QUAD 4 /* name describes a 64-bit number */ ! 103: #define CTLTYPE_STRUCT 5 /* name describes a structure */ ! 104: ! 105: /* ! 106: * Top-level identifiers ! 107: */ ! 108: #define CTL_UNSPEC 0 /* unused */ ! 109: #define CTL_KERN 1 /* "high kernel": proc, limits */ ! 110: #define CTL_VM 2 /* virtual memory */ ! 111: #define CTL_VFS 3 /* file system, mount type is next */ ! 112: #define CTL_NET 4 /* network, see socket.h */ ! 113: #define CTL_DEBUG 5 /* debugging parameters */ ! 114: #define CTL_HW 6 /* generic cpu/io */ ! 115: #define CTL_MACHDEP 7 /* machine dependent */ ! 116: #define CTL_USER 8 /* user-level */ ! 117: #define CTL_MAXID 9 /* number of valid top-level ids */ ! 118: ! 119: #define CTL_NAMES { \ ! 120: { 0, 0 }, \ ! 121: { "kern", CTLTYPE_NODE }, \ ! 122: { "vm", CTLTYPE_NODE }, \ ! 123: { "vfs", CTLTYPE_NODE }, \ ! 124: { "net", CTLTYPE_NODE }, \ ! 125: { "debug", CTLTYPE_NODE }, \ ! 126: { "hw", CTLTYPE_NODE }, \ ! 127: { "machdep", CTLTYPE_NODE }, \ ! 128: { "user", CTLTYPE_NODE }, \ ! 129: } ! 130: ! 131: /* ! 132: * CTL_KERN identifiers ! 133: */ ! 134: #define KERN_OSTYPE 1 /* string: system version */ ! 135: #define KERN_OSRELEASE 2 /* string: system release */ ! 136: #define KERN_OSREV 3 /* int: system revision */ ! 137: #define KERN_VERSION 4 /* string: compile time info */ ! 138: #define KERN_MAXVNODES 5 /* int: max vnodes */ ! 139: #define KERN_MAXPROC 6 /* int: max processes */ ! 140: #define KERN_MAXFILES 7 /* int: max open files */ ! 141: #define KERN_ARGMAX 8 /* int: max arguments to exec */ ! 142: #define KERN_SECURELVL 9 /* int: system security level */ ! 143: #define KERN_HOSTNAME 10 /* string: hostname */ ! 144: #define KERN_HOSTID 11 /* int: host identifier */ ! 145: #define KERN_CLOCKRATE 12 /* struct: struct clockrate */ ! 146: #define KERN_VNODE 13 /* struct: vnode structures */ ! 147: #define KERN_PROC 14 /* struct: process entries */ ! 148: #define KERN_FILE 15 /* struct: file entries */ ! 149: #define KERN_PROF 16 /* node: kernel profiling info */ ! 150: #define KERN_POSIX1 17 /* int: POSIX.1 version */ ! 151: #define KERN_NGROUPS 18 /* int: # of supplemental group ids */ ! 152: #define KERN_JOB_CONTROL 19 /* int: is job control available */ ! 153: #define KERN_SAVED_IDS 20 /* int: saved set-user/group-ID */ ! 154: #define KERN_BOOTTIME 21 /* struct: time kernel was booted */ ! 155: #define KERN_DOMAINNAME 22 /* string: (YP) domainname */ ! 156: #define KERN_MAXPARTITIONS 23 /* int: number of partitions/disk */ ! 157: #define KERN_KDEBUG 24 /* int: kernel trace points */ ! 158: #define KERN_MAXID 25 /* number of valid kern ids */ ! 159: ! 160: /* KERN_KDEBUG types */ ! 161: #define KERN_KDEFLAGS 1 ! 162: #define KERN_KDDFLAGS 2 ! 163: #define KERN_KDENABLE 3 ! 164: #define KERN_KDSETBUF 4 ! 165: #define KERN_KDGETBUF 5 ! 166: #define KERN_KDSETUP 6 ! 167: #define KERN_KDREMOVE 7 ! 168: #define KERN_KDSETREG 8 ! 169: #define KERN_KDGETREG 9 ! 170: #define KERN_KDREADTR 10 ! 171: /* Don't use 13 as it is overloaded with KERN_VNODE */ ! 172: ! 173: #define CTL_KERN_NAMES { \ ! 174: { 0, 0 }, \ ! 175: { "ostype", CTLTYPE_STRING }, \ ! 176: { "osrelease", CTLTYPE_STRING }, \ ! 177: { "osrevision", CTLTYPE_INT }, \ ! 178: { "version", CTLTYPE_STRING }, \ ! 179: { "maxvnodes", CTLTYPE_INT }, \ ! 180: { "maxproc", CTLTYPE_INT }, \ ! 181: { "maxfiles", CTLTYPE_INT }, \ ! 182: { "argmax", CTLTYPE_INT }, \ ! 183: { "securelevel", CTLTYPE_INT }, \ ! 184: { "hostname", CTLTYPE_STRING }, \ ! 185: { "hostid", CTLTYPE_INT }, \ ! 186: { "clockrate", CTLTYPE_STRUCT }, \ ! 187: { "vnode", CTLTYPE_STRUCT }, \ ! 188: { "proc", CTLTYPE_STRUCT }, \ ! 189: { "file", CTLTYPE_STRUCT }, \ ! 190: { "profiling", CTLTYPE_NODE }, \ ! 191: { "posix1version", CTLTYPE_INT }, \ ! 192: { "ngroups", CTLTYPE_INT }, \ ! 193: { "job_control", CTLTYPE_INT }, \ ! 194: { "saved_ids", CTLTYPE_INT }, \ ! 195: { "boottime", CTLTYPE_STRUCT }, \ ! 196: { "domainname", CTLTYPE_STRING }, \ ! 197: { "maxpartitions", CTLTYPE_INT }, \ ! 198: } ! 199: ! 200: /* ! 201: * KERN_PROC subtypes ! 202: */ ! 203: #define KERN_PROC_ALL 0 /* everything */ ! 204: #define KERN_PROC_PID 1 /* by process id */ ! 205: #define KERN_PROC_PGRP 2 /* by process group id */ ! 206: #define KERN_PROC_SESSION 3 /* by session of pid */ ! 207: #define KERN_PROC_TTY 4 /* by controlling tty */ ! 208: #define KERN_PROC_UID 5 /* by effective uid */ ! 209: #define KERN_PROC_RUID 6 /* by real uid */ ! 210: ! 211: /* ! 212: * KERN_PROC subtype ops return arrays of augmented proc structures: ! 213: */ ! 214: struct kinfo_proc { ! 215: struct extern_proc kp_proc; /* proc structure */ ! 216: struct eproc { ! 217: struct proc *e_paddr; /* address of proc */ ! 218: struct session *e_sess; /* session pointer */ ! 219: struct pcred e_pcred; /* process credentials */ ! 220: struct ucred e_ucred; /* current credentials */ ! 221: #ifdef sparc ! 222: struct { ! 223: segsz_t vm_rssize; /* resident set size */ ! 224: segsz_t vm_tsize; /* text size */ ! 225: segsz_t vm_dsize; /* data size */ ! 226: segsz_t vm_ssize; /* stack size */ ! 227: } e_vm; ! 228: #else ! 229: struct vmspace e_vm; /* address space */ ! 230: #endif ! 231: pid_t e_ppid; /* parent process id */ ! 232: pid_t e_pgid; /* process group id */ ! 233: short e_jobc; /* job control counter */ ! 234: dev_t e_tdev; /* controlling tty dev */ ! 235: pid_t e_tpgid; /* tty process group id */ ! 236: struct session *e_tsess; /* tty session pointer */ ! 237: #define WMESGLEN 7 ! 238: char e_wmesg[WMESGLEN+1]; /* wchan message */ ! 239: segsz_t e_xsize; /* text size */ ! 240: short e_xrssize; /* text rss */ ! 241: short e_xccount; /* text references */ ! 242: short e_xswrss; ! 243: long e_flag; ! 244: #define EPROC_CTTY 0x01 /* controlling tty vnode active */ ! 245: #define EPROC_SLEADER 0x02 /* session leader */ ! 246: char e_login[MAXLOGNAME]; /* setlogin() name */ ! 247: long e_spare[4]; ! 248: } kp_eproc; ! 249: }; ! 250: ! 251: /* ! 252: * CTL_VM identifiers ! 253: */ ! 254: #define VM_METER 1 /* struct vmmeter */ ! 255: #define VM_LOADAVG 2 /* struct loadavg */ ! 256: #define VM_MAXID 3 /* number of valid vm ids */ ! 257: #define VM_MACHFACTOR 4 /* struct loadavg with mach factor*/ ! 258: ! 259: #define CTL_VM_NAMES { \ ! 260: { 0, 0 }, \ ! 261: { "vmmeter", CTLTYPE_STRUCT }, \ ! 262: { "loadavg", CTLTYPE_STRUCT }, \ ! 263: } ! 264: ! 265: /* ! 266: * CTL_HW identifiers ! 267: */ ! 268: #define HW_MACHINE 1 /* string: machine class */ ! 269: #define HW_MODEL 2 /* string: specific machine model */ ! 270: #define HW_NCPU 3 /* int: number of cpus */ ! 271: #define HW_BYTEORDER 4 /* int: machine byte order */ ! 272: #define HW_PHYSMEM 5 /* int: total memory */ ! 273: #define HW_USERMEM 6 /* int: non-kernel memory */ ! 274: #define HW_PAGESIZE 7 /* int: software page size */ ! 275: #define HW_DISKNAMES 8 /* strings: disk drive names */ ! 276: #define HW_DISKSTATS 9 /* struct: diskstats[] */ ! 277: #define HW_NEWWORLD 10 /* int: 0 for Legacy, else NewWorld */ ! 278: #define HW_MAXID 11 /* number of valid hw ids */ ! 279: ! 280: #define CTL_HW_NAMES { \ ! 281: { 0, 0 }, \ ! 282: { "machine", CTLTYPE_STRING }, \ ! 283: { "model", CTLTYPE_STRING }, \ ! 284: { "ncpu", CTLTYPE_INT }, \ ! 285: { "byteorder", CTLTYPE_INT }, \ ! 286: { "physmem", CTLTYPE_INT }, \ ! 287: { "usermem", CTLTYPE_INT }, \ ! 288: { "pagesize", CTLTYPE_INT }, \ ! 289: { "disknames", CTLTYPE_STRUCT }, \ ! 290: { "diskstats", CTLTYPE_STRUCT }, \ ! 291: { "newworld", CTLTYPE_INT }, \ ! 292: } ! 293: ! 294: /* ! 295: * CTL_USER definitions ! 296: */ ! 297: #define USER_CS_PATH 1 /* string: _CS_PATH */ ! 298: #define USER_BC_BASE_MAX 2 /* int: BC_BASE_MAX */ ! 299: #define USER_BC_DIM_MAX 3 /* int: BC_DIM_MAX */ ! 300: #define USER_BC_SCALE_MAX 4 /* int: BC_SCALE_MAX */ ! 301: #define USER_BC_STRING_MAX 5 /* int: BC_STRING_MAX */ ! 302: #define USER_COLL_WEIGHTS_MAX 6 /* int: COLL_WEIGHTS_MAX */ ! 303: #define USER_EXPR_NEST_MAX 7 /* int: EXPR_NEST_MAX */ ! 304: #define USER_LINE_MAX 8 /* int: LINE_MAX */ ! 305: #define USER_RE_DUP_MAX 9 /* int: RE_DUP_MAX */ ! 306: #define USER_POSIX2_VERSION 10 /* int: POSIX2_VERSION */ ! 307: #define USER_POSIX2_C_BIND 11 /* int: POSIX2_C_BIND */ ! 308: #define USER_POSIX2_C_DEV 12 /* int: POSIX2_C_DEV */ ! 309: #define USER_POSIX2_CHAR_TERM 13 /* int: POSIX2_CHAR_TERM */ ! 310: #define USER_POSIX2_FORT_DEV 14 /* int: POSIX2_FORT_DEV */ ! 311: #define USER_POSIX2_FORT_RUN 15 /* int: POSIX2_FORT_RUN */ ! 312: #define USER_POSIX2_LOCALEDEF 16 /* int: POSIX2_LOCALEDEF */ ! 313: #define USER_POSIX2_SW_DEV 17 /* int: POSIX2_SW_DEV */ ! 314: #define USER_POSIX2_UPE 18 /* int: POSIX2_UPE */ ! 315: #define USER_STREAM_MAX 19 /* int: POSIX2_STREAM_MAX */ ! 316: #define USER_TZNAME_MAX 20 /* int: POSIX2_TZNAME_MAX */ ! 317: #define USER_MAXID 21 /* number of valid user ids */ ! 318: ! 319: #define CTL_USER_NAMES { \ ! 320: { 0, 0 }, \ ! 321: { "cs_path", CTLTYPE_STRING }, \ ! 322: { "bc_base_max", CTLTYPE_INT }, \ ! 323: { "bc_dim_max", CTLTYPE_INT }, \ ! 324: { "bc_scale_max", CTLTYPE_INT }, \ ! 325: { "bc_string_max", CTLTYPE_INT }, \ ! 326: { "coll_weights_max", CTLTYPE_INT }, \ ! 327: { "expr_nest_max", CTLTYPE_INT }, \ ! 328: { "line_max", CTLTYPE_INT }, \ ! 329: { "re_dup_max", CTLTYPE_INT }, \ ! 330: { "posix2_version", CTLTYPE_INT }, \ ! 331: { "posix2_c_bind", CTLTYPE_INT }, \ ! 332: { "posix2_c_dev", CTLTYPE_INT }, \ ! 333: { "posix2_char_term", CTLTYPE_INT }, \ ! 334: { "posix2_fort_dev", CTLTYPE_INT }, \ ! 335: { "posix2_fort_run", CTLTYPE_INT }, \ ! 336: { "posix2_localedef", CTLTYPE_INT }, \ ! 337: { "posix2_sw_dev", CTLTYPE_INT }, \ ! 338: { "posix2_upe", CTLTYPE_INT }, \ ! 339: { "stream_max", CTLTYPE_INT }, \ ! 340: { "tzname_max", CTLTYPE_INT }, \ ! 341: } ! 342: ! 343: /* ! 344: * CTL_DEBUG definitions ! 345: * ! 346: * Second level identifier specifies which debug variable. ! 347: * Third level identifier specifies which stucture component. ! 348: */ ! 349: #define CTL_DEBUG_NAME 0 /* string: variable name */ ! 350: #define CTL_DEBUG_VALUE 1 /* int: variable value */ ! 351: #define CTL_DEBUG_MAXID 20 ! 352: ! 353: #ifdef _KERNEL ! 354: #ifdef DEBUG ! 355: /* ! 356: * CTL_DEBUG variables. ! 357: * ! 358: * These are declared as separate variables so that they can be ! 359: * individually initialized at the location of their associated ! 360: * variable. The loader prevents multiple use by issuing errors ! 361: * if a variable is initialized in more than one place. They are ! 362: * aggregated into an array in debug_sysctl(), so that it can ! 363: * conveniently locate them when querried. If more debugging ! 364: * variables are added, they must also be declared here and also ! 365: * entered into the array. ! 366: */ ! 367: struct ctldebug { ! 368: char *debugname; /* name of debugging variable */ ! 369: int *debugvar; /* pointer to debugging variable */ ! 370: }; ! 371: extern struct ctldebug debug0, debug1, debug2, debug3, debug4; ! 372: extern struct ctldebug debug5, debug6, debug7, debug8, debug9; ! 373: extern struct ctldebug debug10, debug11, debug12, debug13, debug14; ! 374: extern struct ctldebug debug15, debug16, debug17, debug18, debug19; ! 375: #endif /* DEBUG */ ! 376: ! 377: /* ! 378: * Internal sysctl function calling convention: ! 379: * ! 380: * (*sysctlfn)(name, namelen, oldval, oldlenp, newval, newlen); ! 381: * ! 382: * The name parameter points at the next component of the name to be ! 383: * interpreted. The namelen parameter is the number of integers in ! 384: * the name. ! 385: */ ! 386: typedef int (sysctlfn) ! 387: __P((int *, u_int, void *, size_t *, void *, size_t, struct proc *)); ! 388: ! 389: int sysctl_int __P((void *, size_t *, void *, size_t, int *)); ! 390: int sysctl_rdint __P((void *, size_t *, void *, int)); ! 391: int sysctl_string __P((void *, size_t *, void *, size_t, char *, int)); ! 392: int sysctl_rdstring __P((void *, size_t *, void *, char *)); ! 393: int sysctl_rdstruct __P((void *, size_t *, void *, void *, int)); ! 394: void fill_eproc __P((struct proc *, struct eproc *)); ! 395: ! 396: #else /* !_KERNEL */ ! 397: #include <sys/cdefs.h> ! 398: ! 399: __BEGIN_DECLS ! 400: int sysctl __P((int *, u_int, void *, size_t *, void *, size_t)); ! 401: __END_DECLS ! 402: #endif /* _KERNEL */ ! 403: #endif /* !_SYS_SYSCTL_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.