summaryrefslogtreecommitdiff
path: root/static/freebsd/man9/sysctl_add_oid.9 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man9/sysctl_add_oid.9 3.html')
-rw-r--r--static/freebsd/man9/sysctl_add_oid.9 3.html151
1 files changed, 151 insertions, 0 deletions
diff --git a/static/freebsd/man9/sysctl_add_oid.9 3.html b/static/freebsd/man9/sysctl_add_oid.9 3.html
new file mode 100644
index 00000000..a47cb3ce
--- /dev/null
+++ b/static/freebsd/man9/sysctl_add_oid.9 3.html
@@ -0,0 +1,151 @@
+<table class="head">
+ <tr>
+ <td class="head-ltitle">SYSCTL_ADD_OID(9)</td>
+ <td class="head-vol">Kernel Developer's Manual</td>
+ <td class="head-rtitle">SYSCTL_ADD_OID(9)</td>
+ </tr>
+</table>
+<div class="manual-text">
+<section class="Sh">
+<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
+<p class="Pp"><code class="Nm">sysctl_add_oid</code>,
+ <code class="Nm">sysctl_move_oid</code>,
+ <code class="Nm">sysctl_remove_oid</code>,
+ <code class="Nm">sysctl_remove_name</code> &#x2014; <span class="Nd">runtime
+ sysctl tree manipulation</span></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
+<p class="Pp"><code class="In">#include
+ &lt;<a class="In">sys/types.h</a>&gt;</code>
+ <br/>
+ <code class="In">#include &lt;<a class="In">sys/sysctl.h</a>&gt;</code></p>
+<p class="Pp"><var class="Ft">struct sysctl_oid *</var>
+ <br/>
+ <code class="Fn">sysctl_add_oid</code>(<var class="Fa">struct sysctl_ctx_list
+ *ctx</var>, <var class="Fa">struct sysctl_oid_list *parent</var>,
+ <var class="Fa">int number</var>, <var class="Fa">const char *name</var>,
+ <var class="Fa">int kind</var>, <var class="Fa">void *arg1</var>,
+ <var class="Fa">intmax_t arg2</var>, <var class="Fa">int (*handler)
+ (SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char *format</var>,
+ <var class="Fa">const char *descr</var>, <var class="Fa">const char
+ *label</var>);</p>
+<p class="Pp"><var class="Ft">int</var>
+ <br/>
+ <code class="Fn">sysctl_move_oid</code>(<var class="Fa">struct sysctl_oid
+ *oidp</var>, <var class="Fa">struct sysctl_oid_list *parent</var>);</p>
+<p class="Pp"><var class="Ft">int</var>
+ <br/>
+ <code class="Fn">sysctl_remove_oid</code>(<var class="Fa">struct sysctl_oid
+ *oidp</var>, <var class="Fa">int del</var>, <var class="Fa">int
+ recurse</var>);</p>
+<p class="Pp"><var class="Ft">int</var>
+ <br/>
+ <code class="Fn">sysctl_remove_name</code>(<var class="Fa">struct sysctl_oid
+ *oidp</var>, <var class="Fa">const char *name</var>, <var class="Fa">int
+ del</var>, <var class="Fa">int recurse</var>);</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
+<p class="Pp">These functions provide the interface for creating and deleting
+ sysctl OIDs at runtime for example during the lifetime of a module. The
+ wrapper macros defined by <a class="Xr">sysctl(9)</a> are recommended when
+ creating new OIDs.
+ <a class="permalink" href="#sysctl_add_oid"><code class="Fn" id="sysctl_add_oid">sysctl_add_oid</code></a>()
+ should not be called directly from the code.</p>
+<p class="Pp">Dynamic OIDs of type <code class="Dv">CTLTYPE_NODE</code> are
+ reusable so that several code sections can create and delete them, but in
+ reality they are allocated and freed based on their reference count. As a
+ consequence, it is possible for two or more code sections to create
+ partially overlapping trees that they both can use. It is not possible to
+ create overlapping leaves, nor to create different child types with the same
+ name and parent.</p>
+<p class="Pp" id="sysctl_add_oid~2">The
+ <a class="permalink" href="#sysctl_add_oid~2"><code class="Fn">sysctl_add_oid</code></a>()
+ function creates a raw OID of any type and connects it to its parent node,
+ if any. If the OID is successfully created, the function returns a pointer
+ to it else it returns <code class="Dv">NULL</code>. Many of the arguments
+ for <code class="Fn">sysctl_add_oid</code>() are common to the wrapper
+ macros defined by <a class="Xr">sysctl(9)</a>.</p>
+<p class="Pp" id="sysctl_move_oid">The
+ <a class="permalink" href="#sysctl_move_oid"><code class="Fn">sysctl_move_oid</code></a>()
+ function reparents an existing OID. The OID is assigned a new number as if
+ it had been created with <var class="Fa">number</var> set to
+ <code class="Dv">OID_AUTO</code>.</p>
+<p class="Pp" id="sysctl_remove_oid">The
+ <a class="permalink" href="#sysctl_remove_oid"><code class="Fn">sysctl_remove_oid</code></a>()
+ function removes a dynamically created OID from the tree and optionally
+ freeing its resources. It takes the following arguments:</p>
+<dl class="Bl-tag">
+ <dt><var class="Fa">oidp</var></dt>
+ <dd>A pointer to the dynamic OID to be removed. If the OID is not dynamic, or
+ the pointer is <code class="Dv">NULL</code>, the function returns
+ <code class="Er">EINVAL</code>.</dd>
+ <dt><var class="Fa">del</var></dt>
+ <dd>If non-zero, <code class="Fn">sysctl_remove_oid</code>() will try to free
+ the OID's resources when the reference count of the OID becomes zero.
+ However, if <var class="Fa">del</var> is set to 0, the routine will only
+ deregister the OID from the tree, without freeing its resources. This
+ behaviour is useful when the caller expects to rollback (possibly
+ partially failed) deletion of many OIDs later.</dd>
+ <dt id="WARNING"><var class="Fa">recurse</var></dt>
+ <dd>If non-zero, attempt to remove the node and all its children. If
+ <span class="Pa">recurse</span> is set to 0, any attempt to remove a node
+ that contains any children will result in a
+ <code class="Er">ENOTEMPTY</code> error.
+ <a class="permalink" href="#WARNING"><i class="Em">WARNING</i></a>:
+ <a class="permalink" href="#use"><i class="Em" id="use">use recursive
+ deletion with extreme caution</i></a>! Normally it should not be needed if
+ contexts are used. Contexts take care of tracking inter-dependencies
+ between users of the tree. However, in some extreme cases it might be
+ necessary to remove part of the subtree no matter how it was created, in
+ order to free some other resources. Be aware, though, that this may result
+ in a system <a class="Xr">panic(9)</a> if other code sections continue to
+ use removed subtrees.</dd>
+</dl>
+<p class="Pp" id="sysctl_remove_name">The
+ <a class="permalink" href="#sysctl_remove_name"><code class="Fn">sysctl_remove_name</code></a>()
+ function looks up the child node matching the <var class="Fa">name</var>
+ argument and then invokes the <code class="Fn">sysctl_remove_oid</code>()
+ function on that node, passing along the <var class="Fa">del</var> and
+ <var class="Fa">recurse</var> arguments. If a node having the specified name
+ does not exist an error code of <code class="Er">ENOENT</code> is returned.
+ Else the error code from <code class="Fn">sysctl_remove_oid</code>() is
+ returned.</p>
+<p class="Pp">In most cases the programmer should use contexts, as described in
+ <a class="Xr">sysctl_ctx_init(9)</a>, to keep track of created OIDs, and to
+ delete them later in orderly fashion.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+ ALSO</a></h1>
+<p class="Pp"><a class="Xr">sysctl(8)</a>, <a class="Xr">sysctl(9)</a>,
+ <a class="Xr">sysctl_ctx_free(9)</a>,
+ <a class="Xr">sysctl_ctx_init(9)</a></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
+<p class="Pp">These functions first appeared in <span class="Ux">FreeBSD
+ 4.2</span>.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
+<p class="Pp"><span class="An">Andrzej Bialecki</span>
+ &lt;<a class="Mt" href="mailto:abial@FreeBSD.org">abial@FreeBSD.org</a>&gt;</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
+<p class="Pp">Sharing nodes between many code sections causes interdependencies
+ that sometimes may lock the resources. For example, if module A hooks up a
+ subtree to an OID created by module B, module B will be unable to delete
+ that OID. These issues are handled properly by sysctl contexts.</p>
+<p class="Pp">Many operations on the tree involve traversing linked lists. For
+ this reason, OID creation and removal is relatively costly.</p>
+</section>
+</div>
+<table class="foot">
+ <tr>
+ <td class="foot-date">December 13, 2016</td>
+ <td class="foot-os">FreeBSD 15.0</td>
+ </tr>
+</table>