1*59308cc9SSascha Wildner.\" 2*59308cc9SSascha Wildner.\" Copyright (c) 2006 Robert N. M. Watson 3*59308cc9SSascha Wildner.\" All rights reserved. 4*59308cc9SSascha Wildner.\" 5*59308cc9SSascha Wildner.\" Redistribution and use in source and binary forms, with or without 6*59308cc9SSascha Wildner.\" modification, are permitted provided that the following conditions 7*59308cc9SSascha Wildner.\" are met: 8*59308cc9SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright 9*59308cc9SSascha Wildner.\" notice, this list of conditions and the following disclaimer. 10*59308cc9SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright 11*59308cc9SSascha Wildner.\" notice, this list of conditions and the following disclaimer in the 12*59308cc9SSascha Wildner.\" documentation and/or other materials provided with the distribution. 13*59308cc9SSascha Wildner.\" 14*59308cc9SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*59308cc9SSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*59308cc9SSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*59308cc9SSascha Wildner.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*59308cc9SSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*59308cc9SSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*59308cc9SSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*59308cc9SSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*59308cc9SSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*59308cc9SSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*59308cc9SSascha Wildner.\" SUCH DAMAGE. 25*59308cc9SSascha Wildner.\" 26*59308cc9SSascha Wildner.\" $FreeBSD: src/share/man/man9/sysctl.9,v 1.3 2006/04/28 23:21:36 keramida Exp $ 27*59308cc9SSascha Wildner.\" $DragonFly: src/share/man/man9/sysctl.9,v 1.1 2006/06/22 20:10:54 swildner Exp $ 28*59308cc9SSascha Wildner.\" 29*59308cc9SSascha Wildner.Dd June 22, 2006 30*59308cc9SSascha Wildner.Dt SYSCTL 9 31*59308cc9SSascha Wildner.Os 32*59308cc9SSascha Wildner.Sh NAME 33*59308cc9SSascha Wildner.Nm SYSCTL_DECL , 34*59308cc9SSascha Wildner.Nm SYSCTL_INT , 35*59308cc9SSascha Wildner.Nm SYSCTL_LONG , 36*59308cc9SSascha Wildner.Nm SYSCTL_QUAD , 37*59308cc9SSascha Wildner.Nm SYSCTL_NODE , 38*59308cc9SSascha Wildner.Nm SYSCTL_OPAQUE , 39*59308cc9SSascha Wildner.Nm SYSCTL_PROC , 40*59308cc9SSascha Wildner.Nm SYSCTL_STRING , 41*59308cc9SSascha Wildner.Nm SYSCTL_STRUCT , 42*59308cc9SSascha Wildner.Nm SYSCTL_UINT , 43*59308cc9SSascha Wildner.Nm SYSCTL_ULONG , 44*59308cc9SSascha Wildner.Nm SYSCTL_UQUAD 45*59308cc9SSascha Wildner.Nd Static sysctl declaration functions 46*59308cc9SSascha Wildner.Sh SYNOPSIS 47*59308cc9SSascha Wildner.In sys/types.h 48*59308cc9SSascha Wildner.In sys/sysctl.h 49*59308cc9SSascha Wildner.Fo SYSCTL_DECL 50*59308cc9SSascha Wildner.Fa "name" 51*59308cc9SSascha Wildner.Fc 52*59308cc9SSascha Wildner.Fo SYSCTL_INT 53*59308cc9SSascha Wildner.Fa "parent" 54*59308cc9SSascha Wildner.Fa "nbr" 55*59308cc9SSascha Wildner.Fa "name" 56*59308cc9SSascha Wildner.Fa "access" 57*59308cc9SSascha Wildner.Fa "ptr" 58*59308cc9SSascha Wildner.Fa "val" 59*59308cc9SSascha Wildner.Fa "descr" 60*59308cc9SSascha Wildner.Fc 61*59308cc9SSascha Wildner.Fo SYSCTL_LONG 62*59308cc9SSascha Wildner.Fa "parent" 63*59308cc9SSascha Wildner.Fa "nbr" 64*59308cc9SSascha Wildner.Fa "name" 65*59308cc9SSascha Wildner.Fa "access" 66*59308cc9SSascha Wildner.Fa "ptr" 67*59308cc9SSascha Wildner.Fa "val" 68*59308cc9SSascha Wildner.Fa "descr" 69*59308cc9SSascha Wildner.Fc 70*59308cc9SSascha Wildner.Fo SYSCTL_QUAD 71*59308cc9SSascha Wildner.Fa "parent" 72*59308cc9SSascha Wildner.Fa "nbr" 73*59308cc9SSascha Wildner.Fa "name" 74*59308cc9SSascha Wildner.Fa "access" 75*59308cc9SSascha Wildner.Fa "ptr" 76*59308cc9SSascha Wildner.Fa "val" 77*59308cc9SSascha Wildner.Fa "descr" 78*59308cc9SSascha Wildner.Fc 79*59308cc9SSascha Wildner.Fo SYSCTL_NODE 80*59308cc9SSascha Wildner.Fa "parent" 81*59308cc9SSascha Wildner.Fa "nbr" 82*59308cc9SSascha Wildner.Fa "name" 83*59308cc9SSascha Wildner.Fa "access" 84*59308cc9SSascha Wildner.Fa "handler" 85*59308cc9SSascha Wildner.Fa "descr" 86*59308cc9SSascha Wildner.Fc 87*59308cc9SSascha Wildner.Fo SYSCTL_OPAQUE 88*59308cc9SSascha Wildner.Fa "parent" 89*59308cc9SSascha Wildner.Fa "nbr" 90*59308cc9SSascha Wildner.Fa "name" 91*59308cc9SSascha Wildner.Fa "access" 92*59308cc9SSascha Wildner.Fa "ptr" 93*59308cc9SSascha Wildner.Fa "len" 94*59308cc9SSascha Wildner.Fa "fmt" 95*59308cc9SSascha Wildner.Fa "descr" 96*59308cc9SSascha Wildner.Fc 97*59308cc9SSascha Wildner.Fo SYSCTL_PROC 98*59308cc9SSascha Wildner.Fa "parent" 99*59308cc9SSascha Wildner.Fa "nbr" 100*59308cc9SSascha Wildner.Fa "name" 101*59308cc9SSascha Wildner.Fa "access" 102*59308cc9SSascha Wildner.Fa "ptr" 103*59308cc9SSascha Wildner.Fa "arg" 104*59308cc9SSascha Wildner.Fa "handler" 105*59308cc9SSascha Wildner.Fa "fmt" 106*59308cc9SSascha Wildner.Fa "descr" 107*59308cc9SSascha Wildner.Fc 108*59308cc9SSascha Wildner.Fo SYSCTL_STRING 109*59308cc9SSascha Wildner.Fa "parent" 110*59308cc9SSascha Wildner.Fa "nbr" 111*59308cc9SSascha Wildner.Fa "name" 112*59308cc9SSascha Wildner.Fa "access" 113*59308cc9SSascha Wildner.Fa "arg" 114*59308cc9SSascha Wildner.Fa "len" 115*59308cc9SSascha Wildner.Fa "descr" 116*59308cc9SSascha Wildner.Fc 117*59308cc9SSascha Wildner.Fo SYSCTL_STRUCT 118*59308cc9SSascha Wildner.Fa "parent" 119*59308cc9SSascha Wildner.Fa "nbr" 120*59308cc9SSascha Wildner.Fa "name" 121*59308cc9SSascha Wildner.Fa "access" 122*59308cc9SSascha Wildner.Fa "ptr" 123*59308cc9SSascha Wildner.Fa "type" 124*59308cc9SSascha Wildner.Fa "descr" 125*59308cc9SSascha Wildner.Fc 126*59308cc9SSascha Wildner.Fo SYSCTL_UINT 127*59308cc9SSascha Wildner.Fa "parent" 128*59308cc9SSascha Wildner.Fa "nbr" 129*59308cc9SSascha Wildner.Fa "name" 130*59308cc9SSascha Wildner.Fa "access" 131*59308cc9SSascha Wildner.Fa "ptr" 132*59308cc9SSascha Wildner.Fa "val" 133*59308cc9SSascha Wildner.Fa "descr" 134*59308cc9SSascha Wildner.Fc 135*59308cc9SSascha Wildner.Fo SYSCTL_ULONG 136*59308cc9SSascha Wildner.Fa "parent" 137*59308cc9SSascha Wildner.Fa "nbr" 138*59308cc9SSascha Wildner.Fa "name" 139*59308cc9SSascha Wildner.Fa "access" 140*59308cc9SSascha Wildner.Fa "ptr" 141*59308cc9SSascha Wildner.Fa "val" 142*59308cc9SSascha Wildner.Fa "descr" 143*59308cc9SSascha Wildner.Fc 144*59308cc9SSascha Wildner.Fo SYSCTL_UQUAD 145*59308cc9SSascha Wildner.Fa "parent" 146*59308cc9SSascha Wildner.Fa "nbr" 147*59308cc9SSascha Wildner.Fa "name" 148*59308cc9SSascha Wildner.Fa "access" 149*59308cc9SSascha Wildner.Fa "ptr" 150*59308cc9SSascha Wildner.Fa "val" 151*59308cc9SSascha Wildner.Fa "descr" 152*59308cc9SSascha Wildner.Fc 153*59308cc9SSascha Wildner.Sh DESCRIPTION 154*59308cc9SSascha WildnerThe 155*59308cc9SSascha Wildner.Nm 156*59308cc9SSascha Wildnerkernel interfaces allow code to statically declare 157*59308cc9SSascha Wildner.Xr sysctl 8 158*59308cc9SSascha WildnerMIB entries, which will be initialized when the kernel module containing the 159*59308cc9SSascha Wildnerdeclaration is initialized. 160*59308cc9SSascha WildnerWhen the module is unloaded, the sysctl will be automatically destroyed. 161*59308cc9SSascha Wildner.Pp 162*59308cc9SSascha WildnerSysctl nodes are created in a hierarchical tree, with all static nodes being 163*59308cc9SSascha Wildnerrepresented by named C data structures; in order to create a new node under 164*59308cc9SSascha Wildneran existing node in the tree, the structure representing the desired parent 165*59308cc9SSascha Wildnernode must be declared in the current context using 166*59308cc9SSascha Wildner.Fn SYSCTL_DECL . 167*59308cc9SSascha Wildner.Pp 168*59308cc9SSascha WildnerNew nodes are declared using one of 169*59308cc9SSascha Wildner.Nm SYSCTL_INT , 170*59308cc9SSascha Wildner.Nm SYSCTL_LONG , 171*59308cc9SSascha Wildner.Nm SYSCTL_QUAD , 172*59308cc9SSascha Wildner.Nm SYSCTL_NODE , 173*59308cc9SSascha Wildner.Nm SYSCTL_OPAQUE , 174*59308cc9SSascha Wildner.Nm SYSCTL_PROC , 175*59308cc9SSascha Wildner.Nm SYSCTL_STRING , 176*59308cc9SSascha Wildner.Nm SYSCTL_STRUCT , 177*59308cc9SSascha Wildner.Nm SYSCTL_UINT , 178*59308cc9SSascha Wildner.Nm SYSCTL_ULONG , 179*59308cc9SSascha Wildnerand 180*59308cc9SSascha Wildner.Nm SYSCTL_UQUAD . 181*59308cc9SSascha WildnerEach macro accepts a parent name, as declared using 182*59308cc9SSascha Wildner.Nm SYSCTL_DECL , 183*59308cc9SSascha Wildneran OID number, typically 184*59308cc9SSascha Wildner.Dv OID_AUTO , 185*59308cc9SSascha Wildnera node name, a set of control and access flags, and a description. 186*59308cc9SSascha WildnerDepending on the macro, a pointer to a variable supporting the MIB entry, a 187*59308cc9SSascha Wildnersize, a value, and a function pointer implementing the MIB entry may also be 188*59308cc9SSascha Wildnerpresent. 189*59308cc9SSascha Wildner.Pp 190*59308cc9SSascha WildnerFor most of the above macros, declaring a type as part of the access flags is 191*59308cc9SSascha Wildnernot necessary -- however, when declaring a sysctl implemented by a function, 192*59308cc9SSascha Wildnerincluding a type in the access mask is required: 193*59308cc9SSascha Wildner.Bl -tag -width CTLTYPE_STRING 194*59308cc9SSascha Wildner.It Dv CTLTYPE_NODE 195*59308cc9SSascha WildnerThis is a node intended to be a parent for other nodes. 196*59308cc9SSascha Wildner.It Dv CTLTYPE_INT 197*59308cc9SSascha WildnerThis is a signed integer. 198*59308cc9SSascha Wildner.It Dv CTLTYPE_STRING 199*59308cc9SSascha WildnerThis is a nul-terminated string stored in a character array. 200*59308cc9SSascha Wildner.It Dv CTLTYPE_QUAD 201*59308cc9SSascha WildnerThis is a 64-bit signed integer. 202*59308cc9SSascha Wildner.It Dv CTLTYPE_OPAQUE 203*59308cc9SSascha WildnerThis is an opaque data structure. 204*59308cc9SSascha Wildner.It Dv CTLTYPE_STRUCT 205*59308cc9SSascha WildnerAlias for 206*59308cc9SSascha Wildner.Dv CTLTYPE_OPAQUE. 207*59308cc9SSascha Wildner.It Dv CTLTYPE_UINT 208*59308cc9SSascha WildnerThis is an unsigned integer. 209*59308cc9SSascha Wildner.It Dv CTLTYPE_LONG 210*59308cc9SSascha WildnerThis is a signed long. 211*59308cc9SSascha Wildner.It Dv CTLTYPE_ULONG 212*59308cc9SSascha WildnerThis is an unsigned long. 213*59308cc9SSascha Wildner.It Dv CTLTYPE_UQUAD 214*59308cc9SSascha WildnerThis is a 64-bit unsigned integer. 215*59308cc9SSascha Wildner.El 216*59308cc9SSascha Wildner.Pp 217*59308cc9SSascha WildnerAll sysctl types except for new node declarations require one or more flags 218*59308cc9SSascha Wildnerto be set indicating the read and write disposition of the sysctl: 219*59308cc9SSascha Wildner.Bl -tag -width CTLFLAG_ANYBODY 220*59308cc9SSascha Wildner.It Dv CTLFLAG_RD 221*59308cc9SSascha WildnerThis is a read-only sysctl. 222*59308cc9SSascha WildnerIt Dv CTLFLAG_WR 223*59308cc9SSascha WildnerThis is a writable sysctl. 224*59308cc9SSascha Wildner.It Dv CTLFLAG_RW 225*59308cc9SSascha WildnerThis sysctl is readable and writable. 226*59308cc9SSascha Wildner.It Dv CTLFLAG_ANYBODY 227*59308cc9SSascha WildnerAny user or process can write to this sysctl. 228*59308cc9SSascha Wildner.It Dv CTLFLAG_NOLOCK 229*59308cc9SSascha WildnerDon't lock. 230*59308cc9SSascha Wildner.It Dv CTLFLAG_SECURE 231*59308cc9SSascha WildnerThis sysctl can be written to only if the effective securelevel of the 232*59308cc9SSascha Wildnerprocess is <= 0. 233*59308cc9SSascha Wildner.It Dv CTLFLAG_PRISON 234*59308cc9SSascha WildnerThis sysctl can be written to by processes in 235*59308cc9SSascha Wildner.Xr jail 2 . 236*59308cc9SSascha Wildner.It Dv CTLFLAG_SKIP 237*59308cc9SSascha WildnerWhen iterating the sysctl name space, do not list this sysctl. 238*59308cc9SSascha Wildner.El 239*59308cc9SSascha Wildner.Pp 240*59308cc9SSascha WildnerWhen creating new sysctls, careful attention should be paid to the security 241*59308cc9SSascha Wildnerimplications of the monitoring or management interface being created. 242*59308cc9SSascha WildnerMost sysctls present in the kernel are read-only or writable only by the 243*59308cc9SSascha Wildnersuperuser. 244*59308cc9SSascha WildnerSysctls exporting extensive information on system data structures and 245*59308cc9SSascha Wildneroperation, especially those implemented using procedures, will wish to 246*59308cc9SSascha Wildnerimplement access control to limit the undesired exposure of information about 247*59308cc9SSascha Wildnerother processes, network connections, etc. 248*59308cc9SSascha Wildner.Pp 249*59308cc9SSascha WildnerThe following top level sysctl name spaces are commonly used: 250*59308cc9SSascha Wildner.Bl -tag -width machdep 251*59308cc9SSascha Wildner.It Dv compat 252*59308cc9SSascha WildnerCompatibility layer information. 253*59308cc9SSascha Wildner.It Dv debug 254*59308cc9SSascha WildnerDebugging information. 255*59308cc9SSascha WildnerVarious name spaces exist under 256*59308cc9SSascha Wildner.Dv debug . 257*59308cc9SSascha Wildner.It Dv hw 258*59308cc9SSascha WildnerHardware and device driver information. 259*59308cc9SSascha Wildner.It Dv lwkt 260*59308cc9SSascha WildnerInformation about the 261*59308cc9SSascha Wildner.Xr lwkt 9 262*59308cc9SSascha Wildnersubsystem. 263*59308cc9SSascha Wildner.It Dv kern 264*59308cc9SSascha WildnerKernel behavior tuning; generally deprecated in favor of more specific 265*59308cc9SSascha Wildnername spaces. 266*59308cc9SSascha Wildner.It Dv machdep 267*59308cc9SSascha WildnerMachine-dependent configuration parameters. 268*59308cc9SSascha Wildner.It Dv net 269*59308cc9SSascha WildnerNetwork subsystem. 270*59308cc9SSascha WildnerVarious protocols have name spaces under 271*59308cc9SSascha Wildner.Dv net . 272*59308cc9SSascha Wildner.It Dv sysctl 273*59308cc9SSascha WildnerReserved name space for the implementation of sysctl. 274*59308cc9SSascha Wildner.It Dv user 275*59308cc9SSascha WildnerConfiguration settings relating to user application behavior. 276*59308cc9SSascha WildnerGenerally, configuring applications using kernel sysctls is discouraged. 277*59308cc9SSascha Wildner.It Dv vfs 278*59308cc9SSascha WildnerVirtual file system configuration and information. 279*59308cc9SSascha Wildner.It Dv vm 280*59308cc9SSascha WildnerVirtual memory subsystem configuration and information. 281*59308cc9SSascha Wildner.El 282*59308cc9SSascha Wildner.Sh EXAMPLES 283*59308cc9SSascha WildnerSample use of 284*59308cc9SSascha Wildner.Nm SYSCTL_DECL 285*59308cc9SSascha Wildnerto declare the "machdep" sysctl tree for use by new nodes: 286*59308cc9SSascha Wildner.Bd -literal -offset indent 287*59308cc9SSascha WildnerSYSCTL_DECL(_machdep); 288*59308cc9SSascha Wildner.Ed 289*59308cc9SSascha Wildner.Pp 290*59308cc9SSascha WildnerExamples of integer, opaque, string, and procedure sysctls follow: 291*59308cc9SSascha Wildner.Bd -literal -offset indent 292*59308cc9SSascha Wildner/* 293*59308cc9SSascha Wildner * Example of a constant integer value. Notice that the control 294*59308cc9SSascha Wildner * flags are CTLFLAG_RD, the variable pointer is NULL, and the 295*59308cc9SSascha Wildner * value is declared. 296*59308cc9SSascha Wildner */ 297*59308cc9SSascha WildnerSYSCTL_INT(_debug_sizeof, OID_AUTO, bio, CTLFLAG_RD, NULL, 298*59308cc9SSascha Wildner sizeof(struct bio), "sizeof(struct bio)"); 299*59308cc9SSascha Wildner 300*59308cc9SSascha Wildner/* 301*59308cc9SSascha Wildner * Example of a variable integer value. Notice that the control 302*59308cc9SSascha Wildner * flags are CTLFLAG_RW, the variable pointer is set, and the 303*59308cc9SSascha Wildner * value is 0. 304*59308cc9SSascha Wildner */ 305*59308cc9SSascha Wildnerstatic int doingcache = 1; /* 1 => enable the cache */ 306*59308cc9SSascha WildnerSYSCTL_INT(_debug, OID_AUTO, vfscache, CTLFLAG_RW, &doingcache, 0, 307*59308cc9SSascha Wildner "Enable name cache"); 308*59308cc9SSascha Wildner 309*59308cc9SSascha Wildner/* 310*59308cc9SSascha Wildner * Example of a variable string value. Notice that the control 311*59308cc9SSascha Wildner * flags are CTLFLAG_RW, that the variable pointer and string 312*59308cc9SSascha Wildner * size are set. Unlike newer sysctls, this older sysctl uses a 313*59308cc9SSascha Wildner * static oid number. 314*59308cc9SSascha Wildner */ 315*59308cc9SSascha Wildnerchar kernelname[MAXPATHLEN] = "/kernel"; /* XXX bloat */ 316*59308cc9SSascha WildnerSYSCTL_STRING(_kern, KERN_BOOTFILE, bootfile, CTLFLAG_RW, 317*59308cc9SSascha Wildner kernelname, sizeof(kernelname), "Name of kernel file booted"); 318*59308cc9SSascha Wildner 319*59308cc9SSascha Wildner/* 320*59308cc9SSascha Wildner * Example of an opaque data type exported by sysctl. Notice that 321*59308cc9SSascha Wildner * the variable pointer and size are provided, as well as a format 322*59308cc9SSascha Wildner * string for sysctl(8). 323*59308cc9SSascha Wildner */ 324*59308cc9SSascha Wildnerstatic l_fp pps_freq; /* scaled frequence offset (ns/s) */ 325*59308cc9SSascha WildnerSYSCTL_OPAQUE(_kern_ntp_pll, OID_AUTO, pps_freq, CTLFLAG_RD, 326*59308cc9SSascha Wildner &pps_freq, sizeof(pps_freq), "I", ""); 327*59308cc9SSascha Wildner 328*59308cc9SSascha Wildner/* 329*59308cc9SSascha Wildner * Example of a procedure based sysctl exporting string 330*59308cc9SSascha Wildner * information. Notice that the data type is declared, the NULL 331*59308cc9SSascha Wildner * variable pointer and 0 size, the function pointer, and the 332*59308cc9SSascha Wildner * format string for sysctl(8). 333*59308cc9SSascha Wildner */ 334*59308cc9SSascha WildnerSYSCTL_PROC(_kern, OID_AUTO, msgbuf, CTLTYPE_STRING | CTLFLAG_RD, 335*59308cc9SSascha Wildner 0, 0, sysctl_kern_msgbuf, "A", "Contents of kernel message buffer"); 336*59308cc9SSascha Wildner.Ed 337*59308cc9SSascha Wildner.Pp 338*59308cc9SSascha WildnerWhen adding, modifying, or removing sysctl names, it is important to be 339*59308cc9SSascha Wildneraware that these interfaces may be used by users, libraries, applications, 340*59308cc9SSascha Wildneror documentation (such as published books), and are implicitly published 341*59308cc9SSascha Wildnerapplication interfaces. 342*59308cc9SSascha WildnerAs with other application interfaces, caution must be taken not to break 343*59308cc9SSascha Wildnerexisting applications, and to think about future use of new name spaces so as 344*59308cc9SSascha Wildnerto avoid the need to rename or remove interfaces that might be depended on in 345*59308cc9SSascha Wildnerthe future. 346*59308cc9SSascha Wildner.Sh SEE ALSO 347*59308cc9SSascha Wildner.Xr sysctl 8 , 348*59308cc9SSascha Wildner.Xr sysctl_add_oid 9 , 349*59308cc9SSascha Wildner.Xr sysctl_ctx_free 9 , 350*59308cc9SSascha Wildner.Xr sysctl_ctx_init 9 , 351*59308cc9SSascha Wildner.Xr sysctl_remove_oid 9 352*59308cc9SSascha Wildner.Sh HISTORY 353*59308cc9SSascha Wildner.Xr sysctl 8 354*59308cc9SSascha Wildnerfirst appeared in 355*59308cc9SSascha Wildner.Bx 4.4 . 356*59308cc9SSascha Wildner.Sh AUTHORS 357*59308cc9SSascha WildnerThe sysctl implementation originally found in 358*59308cc9SSascha Wildner.Bx 359*59308cc9SSascha Wildnerhas been extensively rewritten by 360*59308cc9SSascha Wildner.An Poul-Henning Kamp 361*59308cc9SSascha Wildnerin order to add support for name lookups, name space iteration, and dynamic 362*59308cc9SSascha Wildneraddition of MIB nodes. 363*59308cc9SSascha Wildner.Pp 364*59308cc9SSascha WildnerThis man page was written by 365*59308cc9SSascha Wildner.An Robert N. M. Watson . 366