1*59c222abSgnezdo.\" $OpenBSD: sysctl_int.9,v 1.9 2020/09/01 01:57:15 gnezdo Exp $ 2ab84948dSmickey.\" 3ab84948dSmickey.\" Copyright (c) 2006 Michael Shalayeff 4ab84948dSmickey.\" All rights reserved. 5ab84948dSmickey.\" 6ab84948dSmickey.\" Permission to use, copy, modify, and distribute this software for any 7ab84948dSmickey.\" purpose with or without fee is hereby granted, provided that the above 8ab84948dSmickey.\" copyright notice and this permission notice appear in all copies. 9ab84948dSmickey.\" 10ab84948dSmickey.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11ab84948dSmickey.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12ab84948dSmickey.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13ab84948dSmickey.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14ab84948dSmickey.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15ab84948dSmickey.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16ab84948dSmickey.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17ab84948dSmickey.\" 18*59c222abSgnezdo.Dd $Mdocdate: September 1 2020 $ 19ab84948dSmickey.Dt SYSCTL_INT 9 20ab84948dSmickey.Os 21ab84948dSmickey.Sh NAME 22ab84948dSmickey.Nm sysctl_int , 23*59c222abSgnezdo.Nm sysctl_bounded_arr , 24ab84948dSmickey.Nm sysctl_quad , 25ab84948dSmickey.Nm sysctl_string , 26ab84948dSmickey.Nm sysctl_tstring , 27ab84948dSmickey.Nm sysctl_rdint , 28ab84948dSmickey.Nm sysctl_rdquad , 29ab84948dSmickey.Nm sysctl_rdstring , 30ab84948dSmickey.Nm sysctl_rdstruct , 31ab84948dSmickey.Nm sysctl_struct 32ab84948dSmickey.Nd kernel sysctl interface 33ab84948dSmickey.Sh SYNOPSIS 34dddd2645Sschwarze.In sys/types.h 35dddd2645Sschwarze.In sys/sysctl.h 36ab84948dSmickey.Ft int 37ad1e28f3Sschwarze.Fo sysctl_int 38ad1e28f3Sschwarze.Fa "void *oldp" 39ad1e28f3Sschwarze.Fa "size_t *oldlenp" 40ad1e28f3Sschwarze.Fa "void *newp" 41ad1e28f3Sschwarze.Fa "size_t newlen" 42ad1e28f3Sschwarze.Fa "int *valp" 43ad1e28f3Sschwarze.Fc 44ab84948dSmickey.Ft int 45*59c222abSgnezdo.Fo sysctl_bounded_arr 46*59c222abSgnezdo.Fa "const struct sysctl_bounded_args *valpp" 47ad1e28f3Sschwarze.Fa "u_int valplen" 48ad1e28f3Sschwarze.Fa "int *name" 49ad1e28f3Sschwarze.Fa "u_int namelen" 50ad1e28f3Sschwarze.Fa "void *oldp" 51ad1e28f3Sschwarze.Fa "size_t *oldlenp" 52ad1e28f3Sschwarze.Fa "void *newp" 53ad1e28f3Sschwarze.Fa "size_t newlen" 54ad1e28f3Sschwarze.Fc 55ab84948dSmickey.Ft int 56ad1e28f3Sschwarze.Fo sysctl_quad 57ad1e28f3Sschwarze.Fa "void *oldp" 58ad1e28f3Sschwarze.Fa "size_t *oldlenp" 59ad1e28f3Sschwarze.Fa "void *newp" 60ad1e28f3Sschwarze.Fa "size_t newlen" 61ad1e28f3Sschwarze.Fa "int64_t *valp" 62ad1e28f3Sschwarze.Fc 63ab84948dSmickey.Ft int 64ad1e28f3Sschwarze.Fo sysctl_string 65ad1e28f3Sschwarze.Fa "void *oldp" 66ad1e28f3Sschwarze.Fa "size_t *oldlenp" 67ad1e28f3Sschwarze.Fa "void *newp" 68ad1e28f3Sschwarze.Fa "size_t newlen" 69ad1e28f3Sschwarze.Fa "char *str" 70ad1e28f3Sschwarze.Fa "int maxlen" 71ad1e28f3Sschwarze.Fc 72ab84948dSmickey.Ft int 73ad1e28f3Sschwarze.Fo sysctl_tstring 74ad1e28f3Sschwarze.Fa "void *oldp" 75ad1e28f3Sschwarze.Fa "size_t *oldlenp" 76ad1e28f3Sschwarze.Fa "void *newp" 77ad1e28f3Sschwarze.Fa "size_t newlen" 78ad1e28f3Sschwarze.Fa "char *str" 79ad1e28f3Sschwarze.Fa "int maxlen" 80ad1e28f3Sschwarze.Fc 81ab84948dSmickey.Ft int 82ad1e28f3Sschwarze.Fo sysctl_rdint 83ad1e28f3Sschwarze.Fa "void *oldp" 84ad1e28f3Sschwarze.Fa "size_t *oldlenp" 85ad1e28f3Sschwarze.Fa "void *newp" 86ad1e28f3Sschwarze.Fa "int val" 87ad1e28f3Sschwarze.Fc 88ab84948dSmickey.Ft int 89ad1e28f3Sschwarze.Fo sysctl_rdquad 90ad1e28f3Sschwarze.Fa "void *oldp" 91ad1e28f3Sschwarze.Fa "size_t *oldlenp" 92ad1e28f3Sschwarze.Fa "void *newp" 93ad1e28f3Sschwarze.Fa "int64_t val" 94ad1e28f3Sschwarze.Fc 95ab84948dSmickey.Ft int 96ad1e28f3Sschwarze.Fo sysctl_rdstring 97ad1e28f3Sschwarze.Fa "void *oldp" 98ad1e28f3Sschwarze.Fa "size_t *oldlenp" 99ad1e28f3Sschwarze.Fa "void *newp" 100ad1e28f3Sschwarze.Fa "const char *str" 101ad1e28f3Sschwarze.Fc 102ab84948dSmickey.Ft int 103ad1e28f3Sschwarze.Fo sysctl_rdstruct 104ad1e28f3Sschwarze.Fa "void *oldp" 105ad1e28f3Sschwarze.Fa "size_t *oldlenp" 106ad1e28f3Sschwarze.Fa "void *newp" 107ad1e28f3Sschwarze.Fa "const void *sp" 108ad1e28f3Sschwarze.Fa "int len" 109ad1e28f3Sschwarze.Fc 110ab84948dSmickey.Ft int 111ad1e28f3Sschwarze.Fo sysctl_struct 112ad1e28f3Sschwarze.Fa "void *oldp" 113ad1e28f3Sschwarze.Fa "size_t *oldlenp" 114ad1e28f3Sschwarze.Fa "void *newp" 115ad1e28f3Sschwarze.Fa "size_t newlen" 116ad1e28f3Sschwarze.Fa "void *sp" 117ad1e28f3Sschwarze.Fa "int len" 118ad1e28f3Sschwarze.Fc 119ab84948dSmickey.Sh DESCRIPTION 120dfdc3dceSjmcThese functions and data structures aim to simplify and partially 121dfdc3dceSjmcimplement operations for the kernel and user implementations of the 122aaeccf36Sderaadt.Xr sysctl 2 123dfdc3dceSjmcinterface. 124dfdc3dceSjmcA single 125ab84948dSmickey.Xr syscall 9 126ab84948dSmickeyis used to request and modify kernel variables. 127ab84948dSmickeyThe 128dfdc3dceSjmc.Fa mib 129dfdc3dceSjmcargument is recursively scanned as an array of integers, either calling 130dfdc3dceSjmcfurther functions for parsing the rest of the MIB for nodes or operating 131ab84948dSmickeyon kernel data for leaf nodes. 132ab84948dSmickey.Ss Data Structures 133dfdc3dceSjmcFor each level of the MIB tree, the kernel header files provide a 134dfdc3dceSjmc.Xr cpp 1 135ab84948dSmickeymacro initialiser for an array of the following data structures: 136ab84948dSmickey.Bd -literal -offset indent 137ab84948dSmickeystruct ctlname { 138ab84948dSmickey char *ctl_name; /* subsystem name */ 139ab84948dSmickey int ctl_type; /* type of name */ 140ab84948dSmickey}; 141ab84948dSmickey.Ed 142ab84948dSmickey.Pp 143ab84948dSmickeyFor example: 144ab84948dSmickey.Bd -literal -offset indent 145dfdc3dceSjmc#define CTL_NAMES { \e 146dfdc3dceSjmc { 0, 0 }, \e 147dfdc3dceSjmc { "kern", CTLTYPE_NODE }, \e 148dfdc3dceSjmc { "vm", CTLTYPE_NODE }, \e 149dfdc3dceSjmc { "fs", CTLTYPE_NODE }, \e 150dfdc3dceSjmc { "net", CTLTYPE_NODE }, \e 151dfdc3dceSjmc { "debug", CTLTYPE_NODE }, \e 152dfdc3dceSjmc { "hw", CTLTYPE_NODE }, \e 153dfdc3dceSjmc { "machdep", CTLTYPE_NODE }, \e 154dfdc3dceSjmc { "user", CTLTYPE_NODE }, \e 155dfdc3dceSjmc { "ddb", CTLTYPE_NODE }, \e 156dfdc3dceSjmc { "vfs", CTLTYPE_NODE }, \e 157ab84948dSmickey} 158ab84948dSmickey.Ed 159ab84948dSmickey.Pp 160ab84948dSmickeyEach array element initialiser maps the correspondent MIB identifier. 161ab84948dSmickeyThe 162dfdc3dceSjmc.Fa ctl_name 163ab84948dSmickeyfield provides a string name. 164ab84948dSmickeyThe 165dfdc3dceSjmc.Fa ctl_type 166dfdc3dceSjmcfield describes the identifier type, where possible values are: 167dfdc3dceSjmc.Pp 168ab84948dSmickey.Bl -tag -width CTLTYPE_STRING_ -compact -offset indent 169ab84948dSmickey.It CTLTYPE_NODE 170ab84948dSmickeyThe name is a node; 171ab84948dSmickey.It CTLTYPE_INT 172ab84948dSmickeyThe name describes an integer; 173ab84948dSmickey.It CTLTYPE_STRING 174ab84948dSmickeyThe name describes a string; 175ab84948dSmickey.It CTLTYPE_QUAD 176ab84948dSmickeyThe name describes a 64-bit number; 177ab84948dSmickey.It CTLTYPE_STRUCT 178ab84948dSmickeyThe name describes a structure. 179ab84948dSmickey.El 180dfdc3dceSjmc.Pp 181ab84948dSmickeyFor each of the types there are two functions provided to perform both 182dfdc3dceSjmcread and write or only a read operation on the identifier (see the 183ab84948dSmickeyfollowing subsection). 184ab84948dSmickey.Pp 185ab84948dSmickeyThese data structures are used by the 186ab84948dSmickey.Xr sysctl 8 187ab84948dSmickeyprogram to provide mapping into MIB identifiers. 188ab84948dSmickey.Ss Functions 189dfdc3dceSjmcAll of the functions perform a write provided that 190ab84948dSmickey.Ar newp 191dfdc3dceSjmcis not a 192dfdc3dceSjmc.Dv NULL 193ab84948dSmickeypointer and 194ab84948dSmickey.Ar newlen 195dfdc3dceSjmcspecifies an appropriate data length. 196ab84948dSmickeyAll read-only versions of the functions return 197dfdc3dceSjmc.Dv EPERM 198dfdc3dceSjmcif a write operation is requested. 199ab84948dSmickey.Pp 200dfdc3dceSjmcThe following helper functions are provided to aid operation on the 201ab84948dSmickeykernel data variables referenced by the leaf nodes in the MIBs: 202ab84948dSmickey.Bl -tag -width sysctl_ 203ab84948dSmickey.It Fn sysctl_int "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" "int *valp" 204dfdc3dceSjmcThe variable referenced by 205ab84948dSmickey.Ar valp 206ab84948dSmickeyis a 32-bit integer. 207dfdc3dceSjmcRead or write returning the previous value in the user memory location 208dfdc3dceSjmcpointed to by the 209ab84948dSmickey.Ar oldp 210ab84948dSmickeyargument. 211dfdc3dceSjmcThe value pointed to by 212ab84948dSmickey.Ar oldlenp 213dfdc3dceSjmchas to be no less than four. 214ab84948dSmickey.It Fn sysctl_rdint "void *oldp" "size_t *oldlenp" "void *newp" "int val" 215ab84948dSmickeyA read-only version of the above. 216*59c222abSgnezdo.It Fn sysctl_bounded_arr "const struct sysctl_bounded_args *valpp" "u_int valplen" "int *name" "u_int namelen" "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" 217*59c222abSgnezdoAsserts the new value is in the range specified by the element of 218*59c222abSgnezdo.Ar valpp 219*59c222abSgnezdowith the value of the 220*59c222abSgnezdo.Va mib 221*59c222abSgnezdofield equal to 222*59c222abSgnezdo.Ar name[0] , 223*59c222abSgnezdobefore invoking 224*59c222abSgnezdo.Fn sysctl_int 225*59c222abSgnezdoto read/write as normal. 226ab84948dSmickey.It Fn sysctl_quad "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" "int64_t *valp" 227ab84948dSmickeyThe variable referenced is a 64-bit integer. 228dfdc3dceSjmcRead or write returning the previous value in the user memory location 229dfdc3dceSjmcpointed to by the 230ab84948dSmickey.Ar oldp 231ab84948dSmickeyargument. 232dfdc3dceSjmcThe value pointed to by 233ab84948dSmickey.Ar oldlenp 234dfdc3dceSjmchas to be no less than eight. 235ab84948dSmickey.It Fn sysctl_rdquad "void *oldp" "size_t *oldlenp" "void *newp" "int64_t val" 236ab84948dSmickeyA read-only version of the above. 237ab84948dSmickey.It Fn sysctl_string "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" "char *str" "int maxlen" 238ab84948dSmickeyThe variable referenced by the 239ab84948dSmickey.Ar str 240ab84948dSmickeyargument is a string of maximum length of 241ab84948dSmickey.Ar maxlen . 242dfdc3dceSjmcThe old value is copied out into a user buffer pointed to by the 243ab84948dSmickey.Ar oldp 244ab84948dSmickeyargument. 245dfdc3dceSjmcIf there is not enough space to store it, an 246dfdc3dceSjmc.Dv ENOMEM 247ab84948dSmickeyis returned. 248ab84948dSmickeyIf 249ab84948dSmickey.Ar newlen 250dfdc3dceSjmcis larger than 251dfdc3dceSjmc.Ar maxlen , 252dfdc3dceSjmcan 253dfdc3dceSjmc.Dv EINVAL 254ab84948dSmickeyerror is returned. 255ab84948dSmickey.It Fn sysctl_tstring "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" "char *str" "int maxlen" 256ab84948dSmickeyA version of the above that truncates the old value that does not fit 257dfdc3dceSjmcinto the buffer provided by 258ab84948dSmickey.Ar oldp 259ab84948dSmickeyinstead of returning 260dfdc3dceSjmc.Dv ENOMEM . 261ab84948dSmickey.It Fn sysctl_rdstring "void *oldp" "size_t *oldlenp" "void *newp" "const char *str" 262dfdc3dceSjmcA read-only version of 263dfdc3dceSjmc.Fn sysctl_string . 264ab84948dSmickey.It Fn sysctl_struct "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" "void *sp" "int len" 2658318635aSdavidAssume the area pointed to by the 266ab84948dSmickey.Ar sp 267dfdc3dceSjmcargument is an opaque array of bytes of size 268ab84948dSmickey.Ar len . 269ab84948dSmickeyOld and new length checks are performed and data is copied in and/or out. 270ab84948dSmickey.It Fn sysctl_rdstruct "void *oldp" "size_t *oldlenp" "void *newp" "const void *sp" "int len" 271ab84948dSmickeyA read-only version of the above. 272ab84948dSmickey.El 273ab84948dSmickey.Sh SEE ALSO 274aaeccf36Sderaadt.Xr sysctl 2 , 275ab84948dSmickey.Xr sysctl.conf 5 , 276ab84948dSmickey.Xr sysctl 8 , 277ab84948dSmickey.Xr syscall 9 278ab84948dSmickey.Sh HISTORY 279ab84948dSmickeyThese functions first appeared in 280ab84948dSmickey.Bx 4.4 . 281ab84948dSmickey.\" .Sh AUTHORS 282