source: rtems/cpukit/libnetworking/sys/sysctl.h @ 36799d4

4.104.114.84.95
Last change on this file since 36799d4 was 36799d4, checked in by Joel Sherrill <joel.sherrill@…>, on Jan 3, 2003 at 6:09:57 PM

2002-11-26 Chris Johns <cjohns@…>

  • Makefile.am: Added sys/linker_set.h
  • kern/Makefile.am: Added kern_mib.c and kern_sysctl.c.
  • kern/uipc_socket.c: OID changed from KERN_SOMAXCONN to KIPC_SOMAXCONN.
  • kern/uipc_socket2.c: OID changed from KERN_MAXSOCKBUF to KIPC_MAXSOCKBUF.
  • net/if_ethersubr.c: FreeBSD 2.2.2 does not have a _net_link node while 5.0 does.
  • net/if_ppp.c: Removed the TEXT_SET define as these macros are now implemented.
  • net/rtsock.c: Enable sysctl support plus fix the bug with the lastest FreeBSD sysctl header file.
  • netinet/icmp_var.h: FreeBSD 2.2.2 does not have a _net_inet_icmp node while 5.0 does.
  • netinet/if_ether.c: FreeBSD 2.2.2 does not have a _net_link_ether node while 5.0 does.
  • netinet/igmp_var.h: FreeBSD 2.2.2 does not have a _net_inet_igmp node while 5.0 does.
  • netinet/in_pcb.c: Fixed the arguments to the sysctl call. Add inp_gencnt and ipi_count. These are used when listing connections.
  • netinet/in_pcb.h: Added counters to aid the listing of connections.
  • netinet/in_var.h: Provide the _net_inet_ip and _net_inet_raw nodes.
  • netinet/ip_fw.c: Disable the firewall sysctl calls.
  • netinet/tcp_subr.c: Merge tcp_pcblist from the lastest FreeBSD source.
  • netinet/tcp_var.h: Add structures needed by net-snmp to list connections.
  • netinet/udp_usrreq.c: Merged udp_pcblist from the lastest FreeBSD source.
  • netinet/udp_var.h: Added the sysctl id UDPCTL_PCBLIST. Used by net-snmp.
  • rtems_glue.c: Call sysctl_register_all when initialising the network stack to register all the sysctl calls. These are in the special sections and required an updated linker script.
  • rtems/rtems_syscall.c: Add the sysctl call.
  • sys/kernel.h: Use the lastest FreeBSD method of handling sysctl structures. This now held in the sys/linker_set.h file.
  • sys/queue.h: This is from the lastest FreeBSD code with the circular code merged back in as it is not used in the lastest FreeBSD kernel.
  • sys/sysctl.h: The lastest sysctl. This was needed to use with the new linker set method. The FreeBSD 2.2.2 version has asm hacks. The lastest version of the FreeBSD does not have these hacks. It uses gcc attribute directives.
  • Property mode set to 100644
File size: 23.1 KB
Line 
1/*
2 * Copyright (c) 1989, 1993
3 *      The Regents of the University of California.  All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Mike Karels at Berkeley Software Design, Inc.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 *    must display the following acknowledgement:
18 *      This product includes software developed by the University of
19 *      California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 *    may be used to endorse or promote products derived from this software
22 *    without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 *      @(#)sysctl.h    8.1 (Berkeley) 6/2/93
37 * $FreeBSD: src/sys/sys/sysctl.h,v 1.110 2002/10/20 22:48:08 phk Exp $
38 */
39
40#ifndef _SYS_SYSCTL_H_
41#define _SYS_SYSCTL_H_
42
43#include <sys/queue.h>
44
45struct thread;
46/*
47 * Definitions for sysctl call.  The sysctl call uses a hierarchical name
48 * for objects that can be examined or modified.  The name is expressed as
49 * a sequence of integers.  Like a file path name, the meaning of each
50 * component depends on its place in the hierarchy.  The top-level and kern
51 * identifiers are defined here, and other identifiers are defined in the
52 * respective subsystem header files.
53 */
54
55#define CTL_MAXNAME     12      /* largest number of components supported */
56
57/*
58 * Each subsystem defined by sysctl defines a list of variables
59 * for that subsystem. Each name is either a node with further
60 * levels defined below it, or it is a leaf of some particular
61 * type given below. Each sysctl level defines a set of name/type
62 * pairs to be used by sysctl(1) in manipulating the subsystem.
63 */
64struct ctlname {
65        char    *ctl_name;      /* subsystem name */
66        int     ctl_type;       /* type of name */
67};
68
69#define CTLTYPE         0xf     /* Mask for the type */
70#define CTLTYPE_NODE    1       /* name is a node */
71#define CTLTYPE_INT     2       /* name describes an integer */
72#define CTLTYPE_STRING  3       /* name describes a string */
73#define CTLTYPE_QUAD    4       /* name describes a 64-bit number */
74#define CTLTYPE_OPAQUE  5       /* name describes a structure */
75#define CTLTYPE_STRUCT  CTLTYPE_OPAQUE  /* name describes a structure */
76#define CTLTYPE_UINT    6       /* name describes an unsigned integer */
77#define CTLTYPE_LONG    7       /* name describes a long */
78#define CTLTYPE_ULONG   8       /* name describes an unsigned long */
79
80#define CTLFLAG_RD      0x80000000      /* Allow reads of variable */
81#define CTLFLAG_WR      0x40000000      /* Allow writes to the variable */
82#define CTLFLAG_RW      (CTLFLAG_RD|CTLFLAG_WR)
83#define CTLFLAG_NOLOCK  0x20000000      /* XXX Don't Lock */
84#define CTLFLAG_ANYBODY 0x10000000      /* All users can set this var */
85#define CTLFLAG_SECURE  0x08000000      /* Permit set only if securelevel<=0 */
86#define CTLFLAG_PRISON  0x04000000      /* Prisoned roots can fiddle */
87#define CTLFLAG_DYN     0x02000000      /* Dynamic oid - can be freed */
88#define CTLFLAG_SKIP    0x01000000      /* Skip this sysctl when listing */
89
90/*
91 * USE THIS instead of a hardwired number from the categories below
92 * to get dynamically assigned sysctl entries using the linker-set
93 * technology. This is the way nearly all new sysctl variables should
94 * be implemented.
95 * e.g. SYSCTL_INT(_parent, OID_AUTO, name, CTLFLAG_RW, &variable, 0, "");
96 */ 
97#define OID_AUTO        (-1)
98
99/*
100 * The starting number for dynamically-assigned entries.  WARNING!
101 * ALL static sysctl entries should have numbers LESS than this!
102 */
103#define CTL_AUTO_START  0x100
104
105#ifdef KERNEL
106#define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg2, \
107        struct sysctl_req *req
108
109/*
110 * This describes the access space for a sysctl request.  This is needed
111 * so that we can use the interface from the kernel or from user-space.
112 */
113struct sysctl_req {
114        struct thread   *td;            /* used for access checking */
115        int             lock;
116        void            *oldptr;
117        size_t          oldlen;
118        size_t          oldidx;
119        int             (*oldfunc)(struct sysctl_req *, const void *, size_t);
120        void            *newptr;
121        size_t          newlen;
122        size_t          newidx;
123        int             (*newfunc)(struct sysctl_req *, void *, size_t);
124};
125
126SLIST_HEAD(sysctl_oid_list, sysctl_oid);
127
128/*
129 * This describes one "oid" in the MIB tree.  Potentially more nodes can
130 * be hidden behind it, expanded by the handler.
131 */
132struct sysctl_oid {
133        struct sysctl_oid_list *oid_parent;
134        SLIST_ENTRY(sysctl_oid) oid_link;
135        int             oid_number;
136        u_int           oid_kind;
137        void            *oid_arg1;
138        int             oid_arg2;
139        const char      *oid_name;
140        int             (*oid_handler)(SYSCTL_HANDLER_ARGS);
141        const char      *oid_fmt;
142        int             oid_refcnt;
143        const char      *descr;
144};
145
146#define SYSCTL_IN(r, p, l) (r->newfunc)(r, p, l)
147#define SYSCTL_OUT(r, p, l) (r->oldfunc)(r, p, l)
148
149int sysctl_handle_int(SYSCTL_HANDLER_ARGS);
150int sysctl_handle_long(SYSCTL_HANDLER_ARGS);
151int sysctl_handle_intptr(SYSCTL_HANDLER_ARGS);
152int sysctl_handle_string(SYSCTL_HANDLER_ARGS);
153int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS);
154
155/*
156 * These functions are used to add/remove an oid from the mib.
157 */
158void sysctl_register_oid(struct sysctl_oid *oidp);
159void sysctl_unregister_oid(struct sysctl_oid *oidp);
160
161/* Declare a static oid to allow child oids to be added to it. */
162#define SYSCTL_DECL(name)                                       \
163        extern struct sysctl_oid_list sysctl_##name##_children
164
165/* Hide these in macros */
166#define SYSCTL_CHILDREN(oid_ptr) (struct sysctl_oid_list *) \
167        (oid_ptr)->oid_arg1
168#define SYSCTL_STATIC_CHILDREN(oid_name) \
169        (&sysctl_##oid_name##_children)
170
171/* === Structs and macros related to context handling === */
172
173/* All dynamically created sysctls can be tracked in a context list. */
174struct sysctl_ctx_entry {
175        struct sysctl_oid *entry;
176        TAILQ_ENTRY(sysctl_ctx_entry) link;
177};
178
179TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
180
181/* This constructs a "raw" MIB oid. */
182#define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
183        static struct sysctl_oid sysctl__##parent##_##name = {           \
184                &sysctl_##parent##_children, { 0 },                      \
185                nbr, kind, a1, a2, #name, handler, fmt, 0, descr };      \
186        DATA_SET(sysctl_set, sysctl__##parent##_##name)
187
188#define SYSCTL_ADD_OID(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
189        sysctl_add_oid(ctx, parent, nbr, name, kind, a1, a2, handler, fmt, descr)
190
191/* This constructs a node from which other oids can hang. */
192#define SYSCTL_NODE(parent, nbr, name, access, handler, descr)              \
193        struct sysctl_oid_list sysctl_##parent##_##name##_children;         \
194        SYSCTL_OID(parent, nbr, name, CTLTYPE_NODE|(access),                \
195                   (void*)&sysctl_##parent##_##name##_children, 0, handler, \
196                   "N", descr)
197
198#define SYSCTL_ADD_NODE(ctx, parent, nbr, name, access, handler, descr)     \
199        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_NODE|(access),       \
200        0, 0, handler, "N", descr)
201
202/* Oid for a string.  len can be 0 to indicate '\0' termination. */
203#define SYSCTL_STRING(parent, nbr, name, access, arg, len, descr) \
204        SYSCTL_OID(parent, nbr, name, CTLTYPE_STRING|(access), \
205                arg, len, sysctl_handle_string, "A", descr)
206
207#define SYSCTL_ADD_STRING(ctx, parent, nbr, name, access, arg, len, descr)  \
208        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_STRING|(access),     \
209        arg, len, sysctl_handle_string, "A", descr)
210
211/* Oid for an int.  If ptr is NULL, val is returned. */
212#define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr) \
213        SYSCTL_OID(parent, nbr, name, CTLTYPE_INT|(access), \
214                ptr, val, sysctl_handle_int, "I", descr)
215
216#define SYSCTL_ADD_INT(ctx, parent, nbr, name, access, ptr, val, descr)     \
217        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_INT|(access),        \
218        ptr, val, sysctl_handle_int, "I", descr)
219
220/* Oid for an unsigned int.  If ptr is NULL, val is returned. */
221#define SYSCTL_UINT(parent, nbr, name, access, ptr, val, descr) \
222        SYSCTL_OID(parent, nbr, name, CTLTYPE_UINT|(access), \
223                ptr, val, sysctl_handle_int, "IU", descr)
224
225#define SYSCTL_ADD_UINT(ctx, parent, nbr, name, access, ptr, val, descr)    \
226        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_UINT|(access),       \
227        ptr, val, sysctl_handle_int, "IU", descr)
228
229/* Oid for a long.  The pointer must be non NULL. */
230#define SYSCTL_LONG(parent, nbr, name, access, ptr, val, descr) \
231        SYSCTL_OID(parent, nbr, name, CTLTYPE_LONG|(access), \
232                ptr, val, sysctl_handle_long, "L", descr)
233
234#define SYSCTL_ADD_LONG(ctx, parent, nbr, name, access, ptr, descr)         \
235        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_LONG|(access),       \
236        ptr, 0, sysctl_handle_long, "L", descr)
237
238/* Oid for a long.  The pointer must be non NULL. */
239#define SYSCTL_ULONG(parent, nbr, name, access, ptr, val, descr) \
240        SYSCTL_OID(parent, nbr, name, CTLTYPE_ULONG|(access), \
241                ptr, val, sysctl_handle_long, "LU", descr)
242
243#define SYSCTL_ADD_ULONG(ctx, parent, nbr, name, access, ptr, descr)        \
244        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_ULONG|(access),      \
245        ptr, 0, sysctl_handle_long, "LU", descr)
246
247/* Oid for an opaque object.  Specified by a pointer and a length. */
248#define SYSCTL_OPAQUE(parent, nbr, name, access, ptr, len, fmt, descr) \
249        SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \
250                ptr, len, sysctl_handle_opaque, fmt, descr)
251
252#define SYSCTL_ADD_OPAQUE(ctx, parent, nbr, name, access, ptr, len, fmt, descr)\
253        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access),     \
254        ptr, len, sysctl_handle_opaque, fmt, descr)
255
256/* Oid for a struct.  Specified by a pointer and a type. */
257#define SYSCTL_STRUCT(parent, nbr, name, access, ptr, type, descr) \
258        SYSCTL_OID(parent, nbr, name, CTLTYPE_OPAQUE|(access), \
259                ptr, sizeof(struct type), sysctl_handle_opaque, \
260                "S," #type, descr)
261
262#define SYSCTL_ADD_STRUCT(ctx, parent, nbr, name, access, ptr, type, descr) \
263        sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_OPAQUE|(access),     \
264        ptr, sizeof(struct type), sysctl_handle_opaque, "S," #type, descr)
265
266/* Oid for a procedure.  Specified by a pointer and an arg. */
267#define SYSCTL_PROC(parent, nbr, name, access, ptr, arg, handler, fmt, descr) \
268        SYSCTL_OID(parent, nbr, name, (access), \
269                ptr, arg, handler, fmt, descr)
270
271#define SYSCTL_ADD_PROC(ctx, parent, nbr, name, access, ptr, arg, handler, fmt, descr) \
272        sysctl_add_oid(ctx, parent, nbr, name, (access),                            \
273        ptr, arg, handler, fmt, descr)
274
275#endif /* KERNEL */
276
277/*
278 * Top-level identifiers
279 */
280#define CTL_UNSPEC      0               /* unused */
281#define CTL_KERN        1               /* "high kernel": proc, limits */
282#define CTL_VM          2               /* virtual memory */
283#define CTL_VFS         3               /* filesystem, mount type is next */
284#define CTL_NET         4               /* network, see socket.h */
285#define CTL_DEBUG       5               /* debugging parameters */
286#define CTL_HW          6               /* generic cpu/io */
287#define CTL_MACHDEP     7               /* machine dependent */
288#define CTL_USER        8               /* user-level */
289#define CTL_P1003_1B    9               /* POSIX 1003.1B */
290#define CTL_MAXID       10              /* number of valid top-level ids */
291
292#define CTL_NAMES { \
293        { 0, 0 }, \
294        { "kern", CTLTYPE_NODE }, \
295        { "vm", CTLTYPE_NODE }, \
296        { "vfs", CTLTYPE_NODE }, \
297        { "net", CTLTYPE_NODE }, \
298        { "debug", CTLTYPE_NODE }, \
299        { "hw", CTLTYPE_NODE }, \
300        { "machdep", CTLTYPE_NODE }, \
301        { "user", CTLTYPE_NODE }, \
302        { "p1003_1b", CTLTYPE_NODE }, \
303}
304
305/*
306 * CTL_KERN identifiers
307 */
308#define KERN_OSTYPE              1      /* string: system version */
309#define KERN_OSRELEASE           2      /* string: system release */
310#define KERN_OSREV               3      /* int: system revision */
311#define KERN_VERSION             4      /* string: compile time info */
312#define KERN_MAXVNODES           5      /* int: max vnodes */
313#define KERN_MAXPROC             6      /* int: max processes */
314#define KERN_MAXFILES            7      /* int: max open files */
315#define KERN_ARGMAX              8      /* int: max arguments to exec */
316#define KERN_SECURELVL           9      /* int: system security level */
317#define KERN_HOSTNAME           10      /* string: hostname */
318#define KERN_HOSTID             11      /* int: host identifier */
319#define KERN_CLOCKRATE          12      /* struct: struct clockrate */
320#define KERN_VNODE              13      /* struct: vnode structures */
321#define KERN_PROC               14      /* struct: process entries */
322#define KERN_FILE               15      /* struct: file entries */
323#define KERN_PROF               16      /* node: kernel profiling info */
324#define KERN_POSIX1             17      /* int: POSIX.1 version */
325#define KERN_NGROUPS            18      /* int: # of supplemental group ids */
326#define KERN_JOB_CONTROL        19      /* int: is job control available */
327#define KERN_SAVED_IDS          20      /* int: saved set-user/group-ID */
328#define KERN_BOOTTIME           21      /* struct: time kernel was booted */
329#define KERN_NISDOMAINNAME      22      /* string: YP domain name */
330#define KERN_UPDATEINTERVAL     23      /* int: update process sleep time */
331#define KERN_OSRELDATE          24      /* int: OS release date */
332#define KERN_NTP_PLL            25      /* node: NTP PLL control */
333#define KERN_BOOTFILE           26      /* string: name of booted kernel */
334#define KERN_MAXFILESPERPROC    27      /* int: max open files per proc */
335#define KERN_MAXPROCPERUID      28      /* int: max processes per uid */
336#define KERN_DUMPDEV            29      /* dev_t: device to dump on */
337#define KERN_IPC                30      /* node: anything related to IPC */
338#define KERN_DUMMY              31      /* unused */
339#define KERN_PS_STRINGS         32      /* int: address of PS_STRINGS */
340#define KERN_USRSTACK           33      /* int: address of USRSTACK */
341#define KERN_LOGSIGEXIT         34      /* int: do we log sigexit procs? */
342#define KERN_IOV_MAX            35      /* int: value of UIO_MAXIOV */
343#define KERN_MAXID              36      /* number of valid kern ids */
344
345#define CTL_KERN_NAMES { \
346        { 0, 0 }, \
347        { "ostype", CTLTYPE_STRING }, \
348        { "osrelease", CTLTYPE_STRING }, \
349        { "osrevision", CTLTYPE_INT }, \
350        { "version", CTLTYPE_STRING }, \
351        { "maxvnodes", CTLTYPE_INT }, \
352        { "maxproc", CTLTYPE_INT }, \
353        { "maxfiles", CTLTYPE_INT }, \
354        { "argmax", CTLTYPE_INT }, \
355        { "securelevel", CTLTYPE_INT }, \
356        { "hostname", CTLTYPE_STRING }, \
357        { "hostid", CTLTYPE_UINT }, \
358        { "clockrate", CTLTYPE_STRUCT }, \
359        { "vnode", CTLTYPE_STRUCT }, \
360        { "proc", CTLTYPE_STRUCT }, \
361        { "file", CTLTYPE_STRUCT }, \
362        { "profiling", CTLTYPE_NODE }, \
363        { "posix1version", CTLTYPE_INT }, \
364        { "ngroups", CTLTYPE_INT }, \
365        { "job_control", CTLTYPE_INT }, \
366        { "saved_ids", CTLTYPE_INT }, \
367        { "boottime", CTLTYPE_STRUCT }, \
368        { "nisdomainname", CTLTYPE_STRING }, \
369        { "update", CTLTYPE_INT }, \
370        { "osreldate", CTLTYPE_INT }, \
371        { "ntp_pll", CTLTYPE_NODE }, \
372        { "bootfile", CTLTYPE_STRING }, \
373        { "maxfilesperproc", CTLTYPE_INT }, \
374        { "maxprocperuid", CTLTYPE_INT }, \
375        { "ipc", CTLTYPE_NODE }, \
376        { "dummy", CTLTYPE_INT }, \
377        { "ps_strings", CTLTYPE_INT }, \
378        { "usrstack", CTLTYPE_INT }, \
379        { "logsigexit", CTLTYPE_INT }, \
380        { "iov_max", CTLTYPE_INT }, \
381}
382
383/*
384 * CTL_VFS identifiers
385 */
386#define CTL_VFS_NAMES { \
387        { "vfsconf", CTLTYPE_STRUCT }, \
388}
389
390/*
391 * KERN_PROC subtypes
392 */
393#define KERN_PROC_ALL           0       /* everything */
394#define KERN_PROC_PID           1       /* by process id */
395#define KERN_PROC_PGRP          2       /* by process group id */
396#define KERN_PROC_SESSION       3       /* by session of pid */
397#define KERN_PROC_TTY           4       /* by controlling tty */
398#define KERN_PROC_UID           5       /* by effective uid */
399#define KERN_PROC_RUID          6       /* by real uid */
400#define KERN_PROC_ARGS          7       /* get/set arguments/proctitle */
401
402/*
403 * KERN_IPC identifiers
404 */
405#define KIPC_MAXSOCKBUF         1       /* int: max size of a socket buffer */
406#define KIPC_SOCKBUF_WASTE      2       /* int: wastage factor in sockbuf */
407#define KIPC_SOMAXCONN          3       /* int: max length of connection q */
408#define KIPC_MAX_LINKHDR        4       /* int: max length of link header */
409#define KIPC_MAX_PROTOHDR       5       /* int: max length of network header */
410#define KIPC_MAX_HDR            6       /* int: max total length of headers */
411#define KIPC_MAX_DATALEN        7       /* int: max length of data? */
412
413/*
414 * CTL_HW identifiers
415 */
416#define HW_MACHINE       1              /* string: machine class */
417#define HW_MODEL         2              /* string: specific machine model */
418#define HW_NCPU          3              /* int: number of cpus */
419#define HW_BYTEORDER     4              /* int: machine byte order */
420#define HW_PHYSMEM       5              /* int: total memory */
421#define HW_USERMEM       6              /* int: non-kernel memory */
422#define HW_PAGESIZE      7              /* int: software page size */
423#define HW_DISKNAMES     8              /* strings: disk drive names */
424#define HW_DISKSTATS     9              /* struct: diskstats[] */
425#define HW_FLOATINGPT   10              /* int: has HW floating point? */
426#define HW_MACHINE_ARCH 11              /* string: machine architecture */
427#define HW_MAXID        12              /* number of valid hw ids */
428
429#define CTL_HW_NAMES { \
430        { 0, 0 }, \
431        { "machine", CTLTYPE_STRING }, \
432        { "model", CTLTYPE_STRING }, \
433        { "ncpu", CTLTYPE_INT }, \
434        { "byteorder", CTLTYPE_INT }, \
435        { "physmem", CTLTYPE_ULONG }, \
436        { "usermem", CTLTYPE_ULONG }, \
437        { "pagesize", CTLTYPE_INT }, \
438        { "disknames", CTLTYPE_STRUCT }, \
439        { "diskstats", CTLTYPE_STRUCT }, \
440        { "floatingpoint", CTLTYPE_INT }, \
441}
442
443/*
444 * CTL_USER definitions
445 */
446#define USER_CS_PATH             1      /* string: _CS_PATH */
447#define USER_BC_BASE_MAX         2      /* int: BC_BASE_MAX */
448#define USER_BC_DIM_MAX          3      /* int: BC_DIM_MAX */
449#define USER_BC_SCALE_MAX        4      /* int: BC_SCALE_MAX */
450#define USER_BC_STRING_MAX       5      /* int: BC_STRING_MAX */
451#define USER_COLL_WEIGHTS_MAX    6      /* int: COLL_WEIGHTS_MAX */
452#define USER_EXPR_NEST_MAX       7      /* int: EXPR_NEST_MAX */
453#define USER_LINE_MAX            8      /* int: LINE_MAX */
454#define USER_RE_DUP_MAX          9      /* int: RE_DUP_MAX */
455#define USER_POSIX2_VERSION     10      /* int: POSIX2_VERSION */
456#define USER_POSIX2_C_BIND      11      /* int: POSIX2_C_BIND */
457#define USER_POSIX2_C_DEV       12      /* int: POSIX2_C_DEV */
458#define USER_POSIX2_CHAR_TERM   13      /* int: POSIX2_CHAR_TERM */
459#define USER_POSIX2_FORT_DEV    14      /* int: POSIX2_FORT_DEV */
460#define USER_POSIX2_FORT_RUN    15      /* int: POSIX2_FORT_RUN */
461#define USER_POSIX2_LOCALEDEF   16      /* int: POSIX2_LOCALEDEF */
462#define USER_POSIX2_SW_DEV      17      /* int: POSIX2_SW_DEV */
463#define USER_POSIX2_UPE         18      /* int: POSIX2_UPE */
464#define USER_STREAM_MAX         19      /* int: POSIX2_STREAM_MAX */
465#define USER_TZNAME_MAX         20      /* int: POSIX2_TZNAME_MAX */
466#define USER_MAXID              21      /* number of valid user ids */
467
468#define CTL_USER_NAMES { \
469        { 0, 0 }, \
470        { "cs_path", CTLTYPE_STRING }, \
471        { "bc_base_max", CTLTYPE_INT }, \
472        { "bc_dim_max", CTLTYPE_INT }, \
473        { "bc_scale_max", CTLTYPE_INT }, \
474        { "bc_string_max", CTLTYPE_INT }, \
475        { "coll_weights_max", CTLTYPE_INT }, \
476        { "expr_nest_max", CTLTYPE_INT }, \
477        { "line_max", CTLTYPE_INT }, \
478        { "re_dup_max", CTLTYPE_INT }, \
479        { "posix2_version", CTLTYPE_INT }, \
480        { "posix2_c_bind", CTLTYPE_INT }, \
481        { "posix2_c_dev", CTLTYPE_INT }, \
482        { "posix2_char_term", CTLTYPE_INT }, \
483        { "posix2_fort_dev", CTLTYPE_INT }, \
484        { "posix2_fort_run", CTLTYPE_INT }, \
485        { "posix2_localedef", CTLTYPE_INT }, \
486        { "posix2_sw_dev", CTLTYPE_INT }, \
487        { "posix2_upe", CTLTYPE_INT }, \
488        { "stream_max", CTLTYPE_INT }, \
489        { "tzname_max", CTLTYPE_INT }, \
490}
491
492#define CTL_P1003_1B_ASYNCHRONOUS_IO            1       /* boolean */
493#define CTL_P1003_1B_MAPPED_FILES               2       /* boolean */
494#define CTL_P1003_1B_MEMLOCK                    3       /* boolean */
495#define CTL_P1003_1B_MEMLOCK_RANGE              4       /* boolean */
496#define CTL_P1003_1B_MEMORY_PROTECTION          5       /* boolean */
497#define CTL_P1003_1B_MESSAGE_PASSING            6       /* boolean */
498#define CTL_P1003_1B_PRIORITIZED_IO             7       /* boolean */
499#define CTL_P1003_1B_PRIORITY_SCHEDULING        8       /* boolean */
500#define CTL_P1003_1B_REALTIME_SIGNALS           9       /* boolean */
501#define CTL_P1003_1B_SEMAPHORES                 10      /* boolean */
502#define CTL_P1003_1B_FSYNC                      11      /* boolean */
503#define CTL_P1003_1B_SHARED_MEMORY_OBJECTS      12      /* boolean */
504#define CTL_P1003_1B_SYNCHRONIZED_IO            13      /* boolean */
505#define CTL_P1003_1B_TIMERS                     14      /* boolean */
506#define CTL_P1003_1B_AIO_LISTIO_MAX             15      /* int */
507#define CTL_P1003_1B_AIO_MAX                    16      /* int */
508#define CTL_P1003_1B_AIO_PRIO_DELTA_MAX         17      /* int */
509#define CTL_P1003_1B_DELAYTIMER_MAX             18      /* int */
510#define CTL_P1003_1B_MQ_OPEN_MAX                19      /* int */
511#define CTL_P1003_1B_PAGESIZE                   20      /* int */
512#define CTL_P1003_1B_RTSIG_MAX                  21      /* int */
513#define CTL_P1003_1B_SEM_NSEMS_MAX              22      /* int */
514#define CTL_P1003_1B_SEM_VALUE_MAX              23      /* int */
515#define CTL_P1003_1B_SIGQUEUE_MAX               24      /* int */
516#define CTL_P1003_1B_TIMER_MAX                  25      /* int */
517
518#define CTL_P1003_1B_MAXID              26
519
520#define CTL_P1003_1B_NAMES { \
521        { 0, 0 }, \
522        { "asynchronous_io", CTLTYPE_INT }, \
523        { "mapped_files", CTLTYPE_INT }, \
524        { "memlock", CTLTYPE_INT }, \
525        { "memlock_range", CTLTYPE_INT }, \
526        { "memory_protection", CTLTYPE_INT }, \
527        { "message_passing", CTLTYPE_INT }, \
528        { "prioritized_io", CTLTYPE_INT }, \
529        { "priority_scheduling", CTLTYPE_INT }, \
530        { "realtime_signals", CTLTYPE_INT }, \
531        { "semaphores", CTLTYPE_INT }, \
532        { "fsync", CTLTYPE_INT }, \
533        { "shared_memory_objects", CTLTYPE_INT }, \
534        { "synchronized_io", CTLTYPE_INT }, \
535        { "timers", CTLTYPE_INT }, \
536        { "aio_listio_max", CTLTYPE_INT }, \
537        { "aio_max", CTLTYPE_INT }, \
538        { "aio_prio_delta_max", CTLTYPE_INT }, \
539        { "delaytimer_max", CTLTYPE_INT }, \
540        { "mq_open_max", CTLTYPE_INT }, \
541        { "pagesize", CTLTYPE_INT }, \
542        { "rtsig_max", CTLTYPE_INT }, \
543        { "nsems_max", CTLTYPE_INT }, \
544        { "sem_value_max", CTLTYPE_INT }, \
545        { "sigqueue_max", CTLTYPE_INT }, \
546        { "timer_max", CTLTYPE_INT }, \
547}
548
549#ifdef KERNEL
550
551/*
552 * Declare some common oids.
553 */
554extern struct sysctl_oid_list sysctl__children;
555SYSCTL_DECL(_kern);
556SYSCTL_DECL(_sysctl);
557SYSCTL_DECL(_vm);
558SYSCTL_DECL(_vfs);
559SYSCTL_DECL(_net);
560SYSCTL_DECL(_debug);
561SYSCTL_DECL(_debug_sizeof);
562SYSCTL_DECL(_hw);
563SYSCTL_DECL(_machdep);
564SYSCTL_DECL(_user);
565SYSCTL_DECL(_compat);
566
567extern char     machine[];
568extern char     osrelease[];
569extern char     ostype[];
570
571/* Dynamic oid handling */
572struct sysctl_oid *sysctl_add_oid(struct sysctl_ctx_list *clist,
573                struct sysctl_oid_list *parent, int nbr, const char *name,
574                int kind, void *arg1, int arg2,
575                int (*handler) (SYSCTL_HANDLER_ARGS),
576                const char *fmt, const char *descr);
577int     sysctl_remove_oid(struct sysctl_oid *oidp, int del, int recurse);
578int     sysctl_ctx_init(struct sysctl_ctx_list *clist);
579int     sysctl_ctx_free(struct sysctl_ctx_list *clist);
580struct  sysctl_ctx_entry *sysctl_ctx_entry_add(struct sysctl_ctx_list *clist,
581                struct sysctl_oid *oidp);
582struct  sysctl_ctx_entry *sysctl_ctx_entry_find(struct sysctl_ctx_list *clist,
583                struct sysctl_oid *oidp);
584int     sysctl_ctx_entry_del(struct sysctl_ctx_list *clist,
585                struct sysctl_oid *oidp);
586
587int     kernel_sysctl(struct thread *td, int *name, u_int namelen, void *old,
588                      size_t *oldlenp, void *new, size_t newlen,
589                      size_t *retval);
590int     kernel_sysctlbyname(struct thread *td, char *name,
591                void *old, size_t *oldlenp, void *new, size_t newlen,
592                size_t *retval);
593int     userland_sysctl(struct thread *td, int *name, u_int namelen, void *old,
594                        size_t *oldlenp, int inkernel, void *new, size_t newlen,
595                        size_t *retval);
596int     sysctl_find_oid(int *name, u_int namelen, struct sysctl_oid **noid,
597                        int *nindx, struct sysctl_req *req);
598void    sysctl_wire_old_buffer(struct sysctl_req *req, size_t len);
599
600#else   /* !KERNEL */
601#include <sys/cdefs.h>
602
603__BEGIN_DECLS
604int     sysctl(int *, u_int, void *, size_t *, void *, size_t);
605int     sysctlbyname(const char *, void *, size_t *, void *, size_t);
606int     sysctlnametomib(const char *, int *, size_t *);
607__END_DECLS
608#endif  /* KERNEL */
609
610#endif  /* !_SYS_SYSCTL_H_ */
Note: See TracBrowser for help on using the repository browser.