[BACK]Return to sysctl.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/sysctl.h, Revision 1.1.1.1

1.1       nbrk        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_ */

CVSweb