xref: /openbsd/share/man/man9/sysctl_int.9 (revision 59c222ab)
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