diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:43 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:43 -0400 |
| commit | ac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (patch) | |
| tree | 9367490586c84cba28652e443e3166d66c33b0d9 /static/freebsd/man9/sysctl.9 3.html | |
| parent | 253e67c8b3a72b3a4757fdbc5845297628db0a4a (diff) | |
docs: Added All FreeBSD Manuals
Diffstat (limited to 'static/freebsd/man9/sysctl.9 3.html')
| -rw-r--r-- | static/freebsd/man9/sysctl.9 3.html | 1148 |
1 files changed, 1148 insertions, 0 deletions
diff --git a/static/freebsd/man9/sysctl.9 3.html b/static/freebsd/man9/sysctl.9 3.html new file mode 100644 index 00000000..93380af8 --- /dev/null +++ b/static/freebsd/man9/sysctl.9 3.html @@ -0,0 +1,1148 @@ +<table class="head"> + <tr> + <td class="head-ltitle">SYSCTL(9)</td> + <td class="head-vol">Kernel Developer's Manual</td> + <td class="head-rtitle">SYSCTL(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_DECL</code>, + <code class="Nm">SYSCTL_ADD_BOOL</code>, + <code class="Nm">SYSCTL_ADD_COUNTER_U64</code>, + <code class="Nm">SYSCTL_ADD_COUNTER_U64_ARRAY</code>, + <code class="Nm">SYSCTL_ADD_INT</code>, + <code class="Nm">SYSCTL_ADD_LONG</code>, + <code class="Nm">SYSCTL_ADD_NODE</code>, + <code class="Nm">SYSCTL_ADD_NODE_WITH_LABEL</code>, + <code class="Nm">SYSCTL_ADD_OPAQUE</code>, + <code class="Nm">SYSCTL_ADD_PROC</code>, + <code class="Nm">SYSCTL_ADD_QUAD</code>, + <code class="Nm">SYSCTL_ADD_ROOT_NODE</code>, + <code class="Nm">SYSCTL_ADD_S8</code>, + <code class="Nm">SYSCTL_ADD_S16</code>, + <code class="Nm">SYSCTL_ADD_S32</code>, + <code class="Nm">SYSCTL_ADD_S64</code>, + <code class="Nm">SYSCTL_ADD_SBINTIME_MSEC</code>, + <code class="Nm">SYSCTL_ADD_SBINTIME_USEC</code>, + <code class="Nm">SYSCTL_ADD_STRING</code>, + <code class="Nm">SYSCTL_ADD_CONST_STRING</code>, + <code class="Nm">SYSCTL_ADD_STRUCT</code>, + <code class="Nm">SYSCTL_ADD_TIMEVAL_SEC</code>, + <code class="Nm">SYSCTL_ADD_U8</code>, + <code class="Nm">SYSCTL_ADD_U16</code>, + <code class="Nm">SYSCTL_ADD_U32</code>, + <code class="Nm">SYSCTL_ADD_U64</code>, + <code class="Nm">SYSCTL_ADD_UAUTO</code>, + <code class="Nm">SYSCTL_ADD_UINT</code>, + <code class="Nm">SYSCTL_ADD_ULONG</code>, + <code class="Nm">SYSCTL_ADD_UMA_CUR</code>, + <code class="Nm">SYSCTL_ADD_UMA_MAX</code>, + <code class="Nm">SYSCTL_ADD_UQUAD</code>, + <code class="Nm">SYSCTL_CHILDREN</code>, + <code class="Nm">SYSCTL_STATIC_CHILDREN</code>, + <code class="Nm">SYSCTL_NODE_CHILDREN</code>, + <code class="Nm">SYSCTL_PARENT</code>, <code class="Nm">SYSCTL_BOOL</code>, + <code class="Nm">SYSCTL_COUNTER_U64</code>, + <code class="Nm">SYSCTL_COUNTER_U64_ARRAY</code>, + <code class="Nm">SYSCTL_INT</code>, + <code class="Nm">SYSCTL_INT_WITH_LABEL</code>, + <code class="Nm">SYSCTL_LONG</code>, + <code class="Nm">sysctl_msec_to_ticks</code>, + <code class="Nm">SYSCTL_NODE</code>, + <code class="Nm">SYSCTL_NODE_WITH_LABEL</code>, + <code class="Nm">SYSCTL_OPAQUE</code>, <code class="Nm">SYSCTL_PROC</code>, + <code class="Nm">SYSCTL_QUAD</code>, + <code class="Nm">SYSCTL_ROOT_NODE</code>, <code class="Nm">SYSCTL_S8</code>, + <code class="Nm">SYSCTL_S16</code>, <code class="Nm">SYSCTL_S32</code>, + <code class="Nm">SYSCTL_S64</code>, + <code class="Nm">SYSCTL_SBINTIME_MSEC</code>, + <code class="Nm">SYSCTL_SBINTIME_USEC</code>, + <code class="Nm">SYSCTL_STRING</code>, + <code class="Nm">SYSCTL_CONST_STRING</code>, + <code class="Nm">SYSCTL_STRUCT</code>, + <code class="Nm">SYSCTL_TIMEVAL_SEC</code>, + <code class="Nm">SYSCTL_U8</code>, <code class="Nm">SYSCTL_U16</code>, + <code class="Nm">SYSCTL_U32</code>, <code class="Nm">SYSCTL_U64</code>, + <code class="Nm">SYSCTL_UINT</code>, <code class="Nm">SYSCTL_ULONG</code>, + <code class="Nm">SYSCTL_UMA_CUR</code>, + <code class="Nm">SYSCTL_UMA_MAX</code>, <code class="Nm">SYSCTL_UQUAD</code> + — <span class="Nd">Dynamic and static sysctl MIB creation + functions</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 + <<a class="In">sys/param.h</a>></code> + <br/> + <code class="In">#include <<a class="In">sys/sysctl.h</a>></code></p> +<p class="Pp"><code class="Fn">SYSCTL_DECL</code>(<var class="Fa" style="white-space: nowrap;">name</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_BOOL</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 ctlflags</var>, <var class="Fa">bool *ptr</var>, + <var class="Fa">uint8_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_COUNTER_U64</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 ctlflags</var>, + <var class="Fa">counter_u64_t *ptr</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_COUNTER_U64_ARRAY</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 ctlflags</var>, + <var class="Fa">counter_u64_t *ptr</var>, <var class="Fa">intmax_t + len</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_INT</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 ctlflags</var>, <var class="Fa">int *ptr</var>, + <var class="Fa">int val</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_LONG</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 ctlflags</var>, <var class="Fa">long *ptr</var>, + <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_NODE</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 ctlflags</var>, <var class="Fa">int + (*handler)(SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_NODE_WITH_LABEL</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 ctlflags</var>, <var class="Fa">int + (*handler)(SYSCTL_HANDLER_ARGS)</var>, <var class="Fa">const char + *descr</var>, <var class="Fa">const char *label</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_OPAQUE</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 ctlflags</var>, <var class="Fa">void + *ptr</var>, <var class="Fa">intptr_t len</var>, <var class="Fa">const char + *format</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_PROC</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 ctlflags</var>, <var class="Fa">void *arg1</var>, + <var class="Fa">intptr_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>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_QUAD</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 ctlflags</var>, <var class="Fa">int64_t *ptr</var>, + <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_ROOT_NODE</code>(<var class="Fa">struct + sysctl_ctx_list *ctx</var>, <var class="Fa">int number</var>, + <var class="Fa">const char *name</var>, <var class="Fa">int ctlflags</var>, + <var class="Fa">int (*handler)(SYSCTL_HANDLER_ARGS)</var>, + <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_S8</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 ctlflags</var>, <var class="Fa">int8_t *ptr</var>, + <var class="Fa">int8_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_S16</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 ctlflags</var>, <var class="Fa">int16_t *ptr</var>, + <var class="Fa">int16_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_S32</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 ctlflags</var>, <var class="Fa">int32_t *ptr</var>, + <var class="Fa">int32_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_S64</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 ctlflags</var>, <var class="Fa">int64_t *ptr</var>, + <var class="Fa">int64_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</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 ctlflags</var>, <var class="Fa">sbintime_t + *ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_SBINTIME_USEC</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 ctlflags</var>, <var class="Fa">sbintime_t + *ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_STRING</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 ctlflags</var>, <var class="Fa">char + *ptr</var>, <var class="Fa">intptr_t len</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_CONST_STRING</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 ctlflags</var>, <var class="Fa">const char + *ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_STRUCT</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 ctlflags</var>, <var class="Fa">void + *ptr</var>, <var class="Fa">struct_type</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</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 ctlflags</var>, <var class="Fa">struct + timeval *ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_U8</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 ctlflags</var>, <var class="Fa">uint8_t *ptr</var>, + <var class="Fa">uint8_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_U16</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 ctlflags</var>, <var class="Fa">uint16_t *ptr</var>, + <var class="Fa">uint16_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_U32</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 ctlflags</var>, <var class="Fa">uint32_t *ptr</var>, + <var class="Fa">uint32_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_U64</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 ctlflags</var>, <var class="Fa">uint64_t *ptr</var>, + <var class="Fa">uint64_t val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_UINT</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 ctlflags</var>, <var class="Fa">unsigned int *ptr</var>, + <var class="Fa">unsigned int val</var>, <var class="Fa">const char + *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_ULONG</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 ctlflags</var>, <var class="Fa">unsigned + long *ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_UQUAD</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 ctlflags</var>, <var class="Fa">uint64_t + *ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_UMA_CUR</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 ctlflags</var>, <var class="Fa">uma_zone_t + ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_UMA_MAX</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 ctlflags</var>, <var class="Fa">uma_zone_t + ptr</var>, <var class="Fa">const char *descr</var>); <var class="Fa">const + char *descr</var> + <br/> + <var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_ADD_UAUTO</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 ctlflags</var>, <var class="Fa">void + *ptr</var>, <var class="Fa">const char *descr</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var> + <br/> + <code class="Fn">SYSCTL_CHILDREN</code>(<var class="Fa">struct sysctl_oid + *oidp</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var> + <br/> + <code class="Fn">SYSCTL_STATIC_CHILDREN</code>(<var class="Fa">struct + sysctl_oid_list OID_NAME</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid_list *</var> + <br/> + <code class="Fn">SYSCTL_NODE_CHILDREN</code>(<var class="Fa">parent</var>, + <var class="Fa">name</var>);</p> +<p class="Pp"><var class="Ft">struct sysctl_oid *</var> + <br/> + <code class="Fn">SYSCTL_PARENT</code>(<var class="Fa">struct sysctl_oid + *oid</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_BOOL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_COUNTER_U64_ARRAY</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">len</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_INT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_INT_WITH_LABEL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>, + <var class="Fa" style="white-space: nowrap;">label</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_LONG</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><var class="Ft">int</var> + <br/> + <code class="Fn">sysctl_msec_to_ticks</code>(<var class="Fa" style="white-space: nowrap;">SYSCTL_HANDLER_ARGS</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_NODE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">handler</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_NODE_WITH_LABEL</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">handler</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>, + <var class="Fa" style="white-space: nowrap;">label</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_OPAQUE</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">len</var>, + <var class="Fa" style="white-space: nowrap;">format</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_PROC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">arg1</var>, + <var class="Fa" style="white-space: nowrap;">arg2</var>, + <var class="Fa" style="white-space: nowrap;">handler</var>, + <var class="Fa" style="white-space: nowrap;">format</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_QUAD</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_ROOT_NODE</code>(<var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">handler</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_S8</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_S16</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_S32</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_S64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_SBINTIME_MSEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_SBINTIME_USEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_STRING</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">arg</var>, + <var class="Fa" style="white-space: nowrap;">len</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_CONST_STRING</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">arg</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_STRUCT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">struct_type</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_TIMEVAL_SEC</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_U8</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_U16</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_U32</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_U64</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_UINT</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_ULONG</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_UQUAD</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">val</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_UMA_MAX</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +<p class="Pp"><code class="Fn">SYSCTL_UMA_CUR</code>(<var class="Fa" style="white-space: nowrap;">parent</var>, + <var class="Fa" style="white-space: nowrap;">number</var>, + <var class="Fa" style="white-space: nowrap;">name</var>, + <var class="Fa" style="white-space: nowrap;">ctlflags</var>, + <var class="Fa" style="white-space: nowrap;">ptr</var>, + <var class="Fa" style="white-space: nowrap;">descr</var>);</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> +<p class="Pp">The <code class="Nm">SYSCTL</code> kernel interface allows dynamic + or static creation of <a class="Xr">sysctl(8)</a> MIB entries. All static + sysctls are automatically destroyed when the module which they are part of + is unloaded. Most top level categories are created statically and are + available to all kernel code and its modules.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DESCRIPTION_OF_ARGUMENTS"><a class="permalink" href="#DESCRIPTION_OF_ARGUMENTS">DESCRIPTION + OF ARGUMENTS</a></h1> +<dl class="Bl-tag"> + <dt><var class="Fa">ctx</var></dt> + <dd>Pointer to sysctl context or NULL, if no context. See + <a class="Xr">sysctl_ctx_init(9)</a> for how to create a new sysctl + context. Programmers are strongly advised to use contexts to organize the + dynamic OIDs which they create because when a context is destroyed all + belonging sysctls are destroyed as well. This makes the sysctl cleanup + code much simpler. Else deletion of all created OIDs is required at module + unload.</dd> + <dt id="SYSCTL_STATIC_CHILDREN"><var class="Fa">parent</var></dt> + <dd>A pointer to a <code class="Li">struct sysctl_oid_list</code>, which is + the head of the parent's list of children. This pointer is retrieved using + the + <a class="permalink" href="#SYSCTL_STATIC_CHILDREN"><code class="Fn">SYSCTL_STATIC_CHILDREN</code></a>() + macro for static sysctls and the + <a class="permalink" href="#SYSCTL_CHILDREN"><code class="Fn" id="SYSCTL_CHILDREN">SYSCTL_CHILDREN</code></a>() + macro for dynamic sysctls. The + <a class="permalink" href="#SYSCTL_PARENT"><code class="Fn" id="SYSCTL_PARENT">SYSCTL_PARENT</code></a>() + macro can be used to get the parent of an OID. The macro returns NULL if + there is no parent.</dd> + <dt><var class="Fa">number</var></dt> + <dd>The OID number that will be assigned to this OID. In almost all cases this + should be set to <code class="Dv">OID_AUTO</code>, which will result in + the assignment of the next available OID number.</dd> + <dt><var class="Fa">name</var></dt> + <dd>The name of the OID. The newly created OID will contain a copy of the + name.</dd> + <dt><var class="Fa">ctlflags</var></dt> + <dd>A bit mask of sysctl control flags. See the section below describing all + the control flags.</dd> + <dt><var class="Fa">arg1</var></dt> + <dd>First callback argument for procedure sysctls.</dd> + <dt><var class="Fa">arg2</var></dt> + <dd>Second callback argument for procedure sysctls.</dd> + <dt><var class="Fa">len</var></dt> + <dd>The length of the data pointed to by the <var class="Fa">ptr</var> + argument. For string type OIDs a length of zero means that + <a class="Xr">strlen(3)</a> will be used to get the length of the string + at each access to the OID. For array type OIDs the length must be greater + than zero.</dd> + <dt><var class="Fa">ptr</var></dt> + <dd>Pointer to sysctl variable or string data. For sysctl values the pointer + can be SYSCTL_NULL_XXX_PTR which means the OID is read-only and the + returned value should be taken from the <var class="Fa">val</var> + argument.</dd> + <dt><var class="Fa">val</var></dt> + <dd>If the <var class="Fa">ptr</var> argument is SYSCTL_NULL_XXX_PTR, gives + the constant value returned by this OID. Else this argument is not + used.</dd> + <dt><var class="Fa">struct_type</var></dt> + <dd>Name of structure type.</dd> + <dt><var class="Fa">handler</var></dt> + <dd>A pointer to the function that is responsible for handling read and write + requests to this OID. There are several standard handlers that support + operations on nodes, integers, strings and opaque objects. It is possible + to define custom handlers using the <code class="Fn">SYSCTL_PROC</code>() + macro or the <code class="Fn">SYSCTL_ADD_PROC</code>() function.</dd> + <dt><var class="Fa">format</var></dt> + <dd>A pointer to a string which specifies the format of the OID in a symbolic + way. This format is used as a hint by <a class="Xr">sysctl(8)</a> to apply + proper data formatting for display purposes. + <p class="Pp">Current formats:</p> + <div class="Bd-indent"> + <dl class="Bl-tag Bl-compact"> + <dt id="N"><a class="permalink" href="#N"><code class="Cm">N</code></a></dt> + <dd>node</dd> + <dt id="A"><a class="permalink" href="#A"><code class="Cm">A</code></a></dt> + <dd><a class="permalink" href="#char"><code class="Li" id="char">char + *</code></a></dd> + <dt id="C"><a class="permalink" href="#C"><code class="Cm">C</code></a></dt> + <dd><a class="permalink" href="#int8_t"><code class="Li" id="int8_t">int8_t</code></a></dd> + <dt id="CU"><a class="permalink" href="#CU"><code class="Cm">CU</code></a></dt> + <dd><a class="permalink" href="#uint8_t"><code class="Li" id="uint8_t">uint8_t</code></a></dd> + <dt id="I"><a class="permalink" href="#I"><code class="Cm">I</code></a></dt> + <dd><a class="permalink" href="#int"><code class="Li" id="int">int</code></a></dd> + <dt id="IK"><a class="permalink" href="#IK"><code class="Cm">IK</code></a>[<var class="Ar">n</var>]</dt> + <dd>temperature in Kelvin, multiplied by an optional single digit power of + ten scaling factor: 1 (default) gives deciKelvin, 0 gives Kelvin, 3 + gives milliKelvin</dd> + <dt id="IU"><a class="permalink" href="#IU"><code class="Cm">IU</code></a></dt> + <dd><a class="permalink" href="#unsigned"><code class="Li" id="unsigned">unsigned + int</code></a></dd> + <dt id="L"><a class="permalink" href="#L"><code class="Cm">L</code></a></dt> + <dd><a class="permalink" href="#long"><code class="Li" id="long">long</code></a></dd> + <dt id="LU"><a class="permalink" href="#LU"><code class="Cm">LU</code></a></dt> + <dd><a class="permalink" href="#unsigned~2"><code class="Li" id="unsigned~2">unsigned + long</code></a></dd> + <dt id="Q"><a class="permalink" href="#Q"><code class="Cm">Q</code></a></dt> + <dd><a class="permalink" href="#quad_t"><code class="Li" id="quad_t">quad_t</code></a></dd> + <dt id="QU"><a class="permalink" href="#QU"><code class="Cm">QU</code></a></dt> + <dd><a class="permalink" href="#u_quad_t"><code class="Li" id="u_quad_t">u_quad_t</code></a></dd> + <dt id="S"><a class="permalink" href="#S"><code class="Cm">S</code></a></dt> + <dd><a class="permalink" href="#int16_t"><code class="Li" id="int16_t">int16_t</code></a></dd> + <dt id="SU"><a class="permalink" href="#SU"><code class="Cm">SU</code></a></dt> + <dd><a class="permalink" href="#uint16_t"><code class="Li" id="uint16_t">uint16_t</code></a></dd> + <dt id="S,TYPE"><a class="permalink" href="#S,TYPE"><code class="Cm">S,TYPE</code></a></dt> + <dd><a class="permalink" href="#struct"><code class="Li" id="struct">struct + TYPE</code></a> structures</dd> + </dl> + </div> + </dd> + <dt><var class="Fa">descr</var></dt> + <dd>A pointer to a textual description of the OID.</dd> + <dt><var class="Fa">label</var></dt> + <dd>A pointer to an aggregation label for this component of the OID. To make + it easier to export sysctl data to monitoring systems that support + aggregations through labels (e.g., Prometheus), this argument can be used + to attach a label name to an OID. The label acts as a hint that this + component's name should not be part of the metric's name, but attached to + the metric as a label instead. + <p class="Pp">Labels should only be applied to siblings that are + structurally similar and encode the same type of value, as aggregation + is of no use otherwise.</p> + </dd> +</dl> +</section> +<section class="Sh"> +<h1 class="Sh" id="NODE_VALUE_TYPES"><a class="permalink" href="#NODE_VALUE_TYPES">NODE + VALUE TYPES</a></h1> +<p class="Pp">Most of the macros and functions used to create sysctl nodes + export a read-only constant or in-kernel variable whose type matches the + type of the node's value. For example, + <a class="permalink" href="#SYSCTL_INT"><code class="Fn" id="SYSCTL_INT">SYSCTL_INT</code></a>() + reports the raw value of an associated variable of type + <var class="Vt">int</var>. However, nodes may also export a value that is a + translation of an internal representation.</p> +<p class="Pp" id="sysctl_msec_to_ticks">The + <a class="permalink" href="#sysctl_msec_to_ticks"><code class="Fn">sysctl_msec_to_ticks</code></a>() + handler can be used with <code class="Fn">SYSCTL_PROC</code>() or + <a class="permalink" href="#SYSCTL_ADD_PROC"><code class="Fn" id="SYSCTL_ADD_PROC">SYSCTL_ADD_PROC</code></a>() + to export a millisecond time interval. When using this handler, the + <var class="Fa">arg2</var> parameter points to an in-kernel variable of type + <var class="Vt">int</var> which stores a tick count suitable for use with + functions like <a class="Xr">tsleep(9)</a>. The + <code class="Fn">sysctl_msec_to_ticks</code>() function converts this value + to milliseconds when reporting the node's value. Similarly, + <code class="Fn">sysctl_msec_to_ticks</code>() accepts new values in + milliseconds and stores an equivalent value in ticks to + <var class="Fa">*arg2</var>. Note that new code should use kernel variables + of type <var class="Vt">sbintime_t</var> instead of tick counts.</p> +<p class="Pp" id="SYSCTL_ADD_SBINTIME_MSEC">The + <a class="permalink" href="#SYSCTL_ADD_SBINTIME_MSEC"><code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code></a>() + and + <a class="permalink" href="#SYSCTL_ADD_SBINTIME_USEC"><code class="Fn" id="SYSCTL_ADD_SBINTIME_USEC">SYSCTL_ADD_SBINTIME_USEC</code></a>() + functions and + <a class="permalink" href="#SYSCTL_SBINTIME_MSEC"><code class="Fn" id="SYSCTL_SBINTIME_MSEC">SYSCTL_SBINTIME_MSEC</code></a>() + and + <a class="permalink" href="#SYSCTL_SBINTIME_USEC"><code class="Fn" id="SYSCTL_SBINTIME_USEC">SYSCTL_SBINTIME_USEC</code></a>() + macros all create nodes which export an in-kernel variable of type + <var class="Vt">sbintime_t</var>. These nodes do not export the raw value of + the associated variable. Instead, they export a 64-bit integer containing a + count of either milliseconds (the MSEC variants) or microseconds (the USEC + variants).</p> +<p class="Pp" id="SYSCTL_ADD_TIMEVAL_SEC">The + <a class="permalink" href="#SYSCTL_ADD_TIMEVAL_SEC"><code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code></a>() + function and + <a class="permalink" href="#SYSCTL_TIMEVAL_SEC"><code class="Fn" id="SYSCTL_TIMEVAL_SEC">SYSCTL_TIMEVAL_SEC</code></a>() + macro create nodes which export an in-kernel variable of type + <var class="Vt">struct timeval</var>. These nodes do not export full value + of the associated structure. Instead, they export a count in seconds as a + simple integer which is stored in the <var class="Fa">tv_sec</var> field of + the associated variable. This function and macro are intended to be used + with variables which store a non-negative interval rather than an absolute + time. As a result, they reject attempts to store negative values.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CREATING_ROOT_NODES"><a class="permalink" href="#CREATING_ROOT_NODES">CREATING + ROOT NODES</a></h1> +<p class="Pp">Sysctl MIBs or OIDs are created in a hierarchical tree. The nodes + at the bottom of the tree are called root nodes, and have no parent OID. To + create bottom tree nodes the + <a class="permalink" href="#SYSCTL_ROOT_NODE"><code class="Fn" id="SYSCTL_ROOT_NODE">SYSCTL_ROOT_NODE</code></a>() + macro or the + <a class="permalink" href="#SYSCTL_ADD_ROOT_NODE"><code class="Fn" id="SYSCTL_ADD_ROOT_NODE">SYSCTL_ADD_ROOT_NODE</code></a>() + function needs to be used. By default all static sysctl node OIDs are global + and need a + <a class="permalink" href="#SYSCTL_DECL"><code class="Fn" id="SYSCTL_DECL">SYSCTL_DECL</code></a>() + statement prior to their + <a class="permalink" href="#SYSCTL_NODE"><code class="Fn" id="SYSCTL_NODE">SYSCTL_NODE</code></a>() + definition statement, typically in a so-called header file.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CREATING_SYSCTL_STRINGS"><a class="permalink" href="#CREATING_SYSCTL_STRINGS">CREATING + SYSCTL STRINGS</a></h1> +<p class="Pp">Zero terminated character strings sysctls are created either using + the + <a class="permalink" href="#SYSCTL_STRING"><code class="Fn" id="SYSCTL_STRING">SYSCTL_STRING</code></a>() + macro or the + <a class="permalink" href="#SYSCTL_ADD_STRING"><code class="Fn" id="SYSCTL_ADD_STRING">SYSCTL_ADD_STRING</code></a>() + function. If the <var class="Fa">len</var> argument is zero, the string + length is computed at every access to the OID using + <a class="Xr">strlen(3)</a>. Use the + <a class="permalink" href="#SYSCTL_CONST_STRING"><code class="Fn" id="SYSCTL_CONST_STRING">SYSCTL_CONST_STRING</code></a>() + macro or the + <a class="permalink" href="#SYSCTL_ADD_CONST_STRING"><code class="Fn" id="SYSCTL_ADD_CONST_STRING">SYSCTL_ADD_CONST_STRING</code></a>() + function to add a sysctl for a constant string.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CREATING_OPAQUE_SYSCTLS"><a class="permalink" href="#CREATING_OPAQUE_SYSCTLS">CREATING + OPAQUE SYSCTLS</a></h1> +<p class="Pp">The + <a class="permalink" href="#SYSCTL_OPAQUE"><code class="Fn" id="SYSCTL_OPAQUE">SYSCTL_OPAQUE</code></a>() + or + <a class="permalink" href="#SYSCTL_STRUCT"><code class="Fn" id="SYSCTL_STRUCT">SYSCTL_STRUCT</code></a>() + macros or the + <a class="permalink" href="#SYSCTL_ADD_OPAQUE"><code class="Fn" id="SYSCTL_ADD_OPAQUE">SYSCTL_ADD_OPAQUE</code></a>() + or + <a class="permalink" href="#SYSCTL_ADD_STRUCT"><code class="Fn" id="SYSCTL_ADD_STRUCT">SYSCTL_ADD_STRUCT</code></a>() + functions create an OID that handle any chunk of data of the size specified + by the <var class="Fa">len</var> argument and data pointed to by the + <var class="Fa">ptr</var> argument. When using the structure version the + type is encoded as part of the created sysctl.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CREATING_CUSTOM_SYSCTLS"><a class="permalink" href="#CREATING_CUSTOM_SYSCTLS">CREATING + CUSTOM SYSCTLS</a></h1> +<p class="Pp">The <code class="Fn">SYSCTL_PROC</code>() macro and the + <code class="Fn">SYSCTL_ADD_PROC</code>() function create OIDs with the + specified <span class="Pa">handler</span> function. The handler is + responsible for handling all read and write requests to the OID. This OID + type is especially useful if the kernel data is not easily accessible, or + needs to be processed before exporting.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CREATING_A_STATIC_SYSCTL"><a class="permalink" href="#CREATING_A_STATIC_SYSCTL">CREATING + A STATIC SYSCTL</a></h1> +<p class="Pp">Static sysctls are declared using one of the + <a class="permalink" href="#SYSCTL_BOOL"><code class="Fn" id="SYSCTL_BOOL">SYSCTL_BOOL</code></a>(), + <a class="permalink" href="#SYSCTL_COUNTER_U64"><code class="Fn" id="SYSCTL_COUNTER_U64">SYSCTL_COUNTER_U64</code></a>(), + <a class="permalink" href="#SYSCTL_COUNTER_U64_ARRAY"><code class="Fn" id="SYSCTL_COUNTER_U64_ARRAY">SYSCTL_COUNTER_U64_ARRAY</code></a>(), + <code class="Fn">SYSCTL_INT</code>(), + <a class="permalink" href="#SYSCTL_INT_WITH_LABEL"><code class="Fn" id="SYSCTL_INT_WITH_LABEL">SYSCTL_INT_WITH_LABEL</code></a>(), + <a class="permalink" href="#SYSCTL_LONG"><code class="Fn" id="SYSCTL_LONG">SYSCTL_LONG</code></a>(), + <code class="Fn">SYSCTL_NODE</code>(), + <a class="permalink" href="#SYSCTL_NODE_WITH_LABEL"><code class="Fn" id="SYSCTL_NODE_WITH_LABEL">SYSCTL_NODE_WITH_LABEL</code></a>(), + <code class="Fn">SYSCTL_OPAQUE</code>(), + <code class="Fn">SYSCTL_PROC</code>(), + <a class="permalink" href="#SYSCTL_QUAD"><code class="Fn" id="SYSCTL_QUAD">SYSCTL_QUAD</code></a>(), + <code class="Fn">SYSCTL_ROOT_NODE</code>(), + <a class="permalink" href="#SYSCTL_S8"><code class="Fn" id="SYSCTL_S8">SYSCTL_S8</code></a>(), + <a class="permalink" href="#SYSCTL_S16"><code class="Fn" id="SYSCTL_S16">SYSCTL_S16</code></a>(), + <a class="permalink" href="#SYSCTL_S32"><code class="Fn" id="SYSCTL_S32">SYSCTL_S32</code></a>(), + <a class="permalink" href="#SYSCTL_S64"><code class="Fn" id="SYSCTL_S64">SYSCTL_S64</code></a>(), + <code class="Fn">SYSCTL_SBINTIME_MSEC</code>(), + <code class="Fn">SYSCTL_SBINTIME_USEC</code>(), + <code class="Fn">SYSCTL_STRING</code>(), + <code class="Fn">SYSCTL_CONST_STRING</code>(), + <code class="Fn">SYSCTL_STRUCT</code>(), + <code class="Fn">SYSCTL_TIMEVAL_SEC</code>(), + <a class="permalink" href="#SYSCTL_U8"><code class="Fn" id="SYSCTL_U8">SYSCTL_U8</code></a>(), + <a class="permalink" href="#SYSCTL_U16"><code class="Fn" id="SYSCTL_U16">SYSCTL_U16</code></a>(), + <a class="permalink" href="#SYSCTL_U32"><code class="Fn" id="SYSCTL_U32">SYSCTL_U32</code></a>(), + <a class="permalink" href="#SYSCTL_U64"><code class="Fn" id="SYSCTL_U64">SYSCTL_U64</code></a>(), + <a class="permalink" href="#SYSCTL_UINT"><code class="Fn" id="SYSCTL_UINT">SYSCTL_UINT</code></a>(), + <a class="permalink" href="#SYSCTL_ULONG"><code class="Fn" id="SYSCTL_ULONG">SYSCTL_ULONG</code></a>(), + <a class="permalink" href="#SYSCTL_UQUAD"><code class="Fn" id="SYSCTL_UQUAD">SYSCTL_UQUAD</code></a>(), + <a class="permalink" href="#SYSCTL_UMA_CUR"><code class="Fn" id="SYSCTL_UMA_CUR">SYSCTL_UMA_CUR</code></a>() + or + <a class="permalink" href="#SYSCTL_UMA_MAX"><code class="Fn" id="SYSCTL_UMA_MAX">SYSCTL_UMA_MAX</code></a>() + macros.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CREATING_A_DYNAMIC_SYSCTL"><a class="permalink" href="#CREATING_A_DYNAMIC_SYSCTL">CREATING + A DYNAMIC SYSCTL</a></h1> +<p class="Pp">Dynamic nodes are created using one of the + <a class="permalink" href="#SYSCTL_ADD_BOOL"><code class="Fn" id="SYSCTL_ADD_BOOL">SYSCTL_ADD_BOOL</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_COUNTER_U64"><code class="Fn" id="SYSCTL_ADD_COUNTER_U64">SYSCTL_ADD_COUNTER_U64</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_COUNTER_U64_ARRAY"><code class="Fn" id="SYSCTL_ADD_COUNTER_U64_ARRAY">SYSCTL_ADD_COUNTER_U64_ARRAY</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_INT"><code class="Fn" id="SYSCTL_ADD_INT">SYSCTL_ADD_INT</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_LONG"><code class="Fn" id="SYSCTL_ADD_LONG">SYSCTL_ADD_LONG</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_NODE"><code class="Fn" id="SYSCTL_ADD_NODE">SYSCTL_ADD_NODE</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_NODE_WITH_LABEL"><code class="Fn" id="SYSCTL_ADD_NODE_WITH_LABEL">SYSCTL_ADD_NODE_WITH_LABEL</code></a>(), + <code class="Fn">SYSCTL_ADD_OPAQUE</code>(), + <code class="Fn">SYSCTL_ADD_PROC</code>(), + <a class="permalink" href="#SYSCTL_ADD_QUAD"><code class="Fn" id="SYSCTL_ADD_QUAD">SYSCTL_ADD_QUAD</code></a>(), + <code class="Fn">SYSCTL_ADD_ROOT_NODE</code>(), + <a class="permalink" href="#SYSCTL_ADD_S8"><code class="Fn" id="SYSCTL_ADD_S8">SYSCTL_ADD_S8</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_S16"><code class="Fn" id="SYSCTL_ADD_S16">SYSCTL_ADD_S16</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_S32"><code class="Fn" id="SYSCTL_ADD_S32">SYSCTL_ADD_S32</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_S64"><code class="Fn" id="SYSCTL_ADD_S64">SYSCTL_ADD_S64</code></a>(), + <code class="Fn">SYSCTL_ADD_SBINTIME_MSEC</code>(), + <code class="Fn">SYSCTL_ADD_SBINTIME_USEC</code>(), + <code class="Fn">SYSCTL_ADD_STRING</code>(), + <code class="Fn">SYSCTL_ADD_CONST_STRING</code>(), + <code class="Fn">SYSCTL_ADD_STRUCT</code>(), + <code class="Fn">SYSCTL_ADD_TIMEVAL_SEC</code>(), + <a class="permalink" href="#SYSCTL_ADD_U8"><code class="Fn" id="SYSCTL_ADD_U8">SYSCTL_ADD_U8</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_U16"><code class="Fn" id="SYSCTL_ADD_U16">SYSCTL_ADD_U16</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_U32"><code class="Fn" id="SYSCTL_ADD_U32">SYSCTL_ADD_U32</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_U64"><code class="Fn" id="SYSCTL_ADD_U64">SYSCTL_ADD_U64</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_UAUTO"><code class="Fn" id="SYSCTL_ADD_UAUTO">SYSCTL_ADD_UAUTO</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_UINT"><code class="Fn" id="SYSCTL_ADD_UINT">SYSCTL_ADD_UINT</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_ULONG"><code class="Fn" id="SYSCTL_ADD_ULONG">SYSCTL_ADD_ULONG</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_UQUAD"><code class="Fn" id="SYSCTL_ADD_UQUAD">SYSCTL_ADD_UQUAD</code></a>(), + <a class="permalink" href="#SYSCTL_ADD_UMA_CUR"><code class="Fn" id="SYSCTL_ADD_UMA_CUR">SYSCTL_ADD_UMA_CUR</code></a>() + or + <a class="permalink" href="#SYSCTL_ADD_UMA_MAX"><code class="Fn" id="SYSCTL_ADD_UMA_MAX">SYSCTL_ADD_UMA_MAX</code></a>() + functions. See <a class="Xr">sysctl_remove_oid(9)</a> or + <a class="Xr">sysctl_ctx_free(9)</a> for more information on how to destroy + a dynamically created OID.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="CONTROL_FLAGS"><a class="permalink" href="#CONTROL_FLAGS">CONTROL + FLAGS</a></h1> +<p class="Pp">For most of the above functions and macros, declaring a type as + part of the access flags is not necessary — however, when declaring a + sysctl implemented by a function, including a type in the access mask is + required:</p> +<dl class="Bl-tag"> + <dt id="CTLTYPE_NODE"><a class="permalink" href="#CTLTYPE_NODE"><code class="Dv">CTLTYPE_NODE</code></a></dt> + <dd>This is a node intended to be a parent for other nodes.</dd> + <dt id="CTLTYPE_INT"><a class="permalink" href="#CTLTYPE_INT"><code class="Dv">CTLTYPE_INT</code></a></dt> + <dd>This is a signed integer.</dd> + <dt id="CTLTYPE_STRING"><a class="permalink" href="#CTLTYPE_STRING"><code class="Dv">CTLTYPE_STRING</code></a></dt> + <dd>This is a nul-terminated string stored in a character array.</dd> + <dt id="CTLTYPE_S8"><a class="permalink" href="#CTLTYPE_S8"><code class="Dv">CTLTYPE_S8</code></a></dt> + <dd>This is an 8-bit signed integer.</dd> + <dt id="CTLTYPE_S16"><a class="permalink" href="#CTLTYPE_S16"><code class="Dv">CTLTYPE_S16</code></a></dt> + <dd>This is a 16-bit signed integer.</dd> + <dt id="CTLTYPE_S32"><a class="permalink" href="#CTLTYPE_S32"><code class="Dv">CTLTYPE_S32</code></a></dt> + <dd>This is a 32-bit signed integer.</dd> + <dt id="CTLTYPE_S64"><a class="permalink" href="#CTLTYPE_S64"><code class="Dv">CTLTYPE_S64</code></a></dt> + <dd>This is a 64-bit signed integer.</dd> + <dt id="CTLTYPE_OPAQUE"><a class="permalink" href="#CTLTYPE_OPAQUE"><code class="Dv">CTLTYPE_OPAQUE</code></a></dt> + <dd>This is an opaque data structure.</dd> + <dt id="CTLTYPE_STRUCT"><a class="permalink" href="#CTLTYPE_STRUCT"><code class="Dv">CTLTYPE_STRUCT</code></a></dt> + <dd>Alias for <code class="Dv">CTLTYPE_OPAQUE</code>.</dd> + <dt id="CTLTYPE_U8"><a class="permalink" href="#CTLTYPE_U8"><code class="Dv">CTLTYPE_U8</code></a></dt> + <dd>This is an 8-bit unsigned integer.</dd> + <dt id="CTLTYPE_U16"><a class="permalink" href="#CTLTYPE_U16"><code class="Dv">CTLTYPE_U16</code></a></dt> + <dd>This is a 16-bit unsigned integer.</dd> + <dt id="CTLTYPE_U32"><a class="permalink" href="#CTLTYPE_U32"><code class="Dv">CTLTYPE_U32</code></a></dt> + <dd>This is a 32-bit unsigned integer.</dd> + <dt id="CTLTYPE_U64"><a class="permalink" href="#CTLTYPE_U64"><code class="Dv">CTLTYPE_U64</code></a></dt> + <dd>This is a 64-bit unsigned integer.</dd> + <dt id="CTLTYPE_UINT"><a class="permalink" href="#CTLTYPE_UINT"><code class="Dv">CTLTYPE_UINT</code></a></dt> + <dd>This is an unsigned integer.</dd> + <dt id="CTLTYPE_LONG"><a class="permalink" href="#CTLTYPE_LONG"><code class="Dv">CTLTYPE_LONG</code></a></dt> + <dd>This is a signed long.</dd> + <dt id="CTLTYPE_ULONG"><a class="permalink" href="#CTLTYPE_ULONG"><code class="Dv">CTLTYPE_ULONG</code></a></dt> + <dd>This is an unsigned long.</dd> +</dl> +<p class="Pp">All sysctl types except for new node declarations require one of + the following flags to be set indicating the read and write disposition of + the sysctl:</p> +<dl class="Bl-tag"> + <dt id="CTLFLAG_RD"><a class="permalink" href="#CTLFLAG_RD"><code class="Dv">CTLFLAG_RD</code></a></dt> + <dd>This is a read-only sysctl.</dd> + <dt id="CTLFLAG_RDTUN"><a class="permalink" href="#CTLFLAG_RDTUN"><code class="Dv">CTLFLAG_RDTUN</code></a></dt> + <dd>This is a read-only sysctl and tunable which is fetched once from the + system environment early during module load or system boot.</dd> + <dt id="CTLFLAG_WR"><a class="permalink" href="#CTLFLAG_WR"><code class="Dv">CTLFLAG_WR</code></a></dt> + <dd>This is a writable sysctl.</dd> + <dt id="CTLFLAG_RW"><a class="permalink" href="#CTLFLAG_RW"><code class="Dv">CTLFLAG_RW</code></a></dt> + <dd>This sysctl is readable and writable.</dd> + <dt id="CTLFLAG_RWTUN"><a class="permalink" href="#CTLFLAG_RWTUN"><code class="Dv">CTLFLAG_RWTUN</code></a></dt> + <dd>This is a readable and writeable sysctl and tunable which is fetched once + from the system environment early during module load or system boot.</dd> + <dt id="CTLFLAG_NOFETCH"><a class="permalink" href="#CTLFLAG_NOFETCH"><code class="Dv">CTLFLAG_NOFETCH</code></a></dt> + <dd>In case the node is marked as a tunable using the CTLFLAG_[XX]TUN, this + flag will prevent fetching the initial value from the system environment. + Typically this flag should only be used for very early low level system + setup code, and not by common drivers and modules.</dd> + <dt id="CTLFLAG_MPSAFE"><a class="permalink" href="#CTLFLAG_MPSAFE"><code class="Dv">CTLFLAG_MPSAFE</code></a></dt> + <dd>This <a class="Xr">sysctl(9)</a> handler is MP safe. Do not grab Giant + around calls to this handler. This should only be used for + <a class="permalink" href="#SYSCTL_PROC"><code class="Fn" id="SYSCTL_PROC">SYSCTL_PROC</code></a>() + entries.</dd> +</dl> +<p class="Pp">Additionally, any of the following optional flags may also be + specified:</p> +<dl class="Bl-tag"> + <dt id="CTLFLAG_ANYBODY"><a class="permalink" href="#CTLFLAG_ANYBODY"><code class="Dv">CTLFLAG_ANYBODY</code></a></dt> + <dd>Any user or process can write to this sysctl.</dd> + <dt id="CTLFLAG_CAPRD"><a class="permalink" href="#CTLFLAG_CAPRD"><code class="Dv">CTLFLAG_CAPRD</code></a></dt> + <dd>A process in capability mode can read from this sysctl.</dd> + <dt id="CTLFLAG_CAPWR"><a class="permalink" href="#CTLFLAG_CAPWR"><code class="Dv">CTLFLAG_CAPWR</code></a></dt> + <dd>A process in capability mode can write to this sysctl.</dd> + <dt id="CTLFLAG_SECURE"><a class="permalink" href="#CTLFLAG_SECURE"><code class="Dv">CTLFLAG_SECURE</code></a></dt> + <dd>This sysctl can be written to only if the effective securelevel of the + process is ≤ 0.</dd> + <dt id="CTLFLAG_PRISON"><a class="permalink" href="#CTLFLAG_PRISON"><code class="Dv">CTLFLAG_PRISON</code></a></dt> + <dd>This sysctl can be written to by processes in + <a class="Xr">jail(2)</a>.</dd> + <dt id="CTLFLAG_SKIP"><a class="permalink" href="#CTLFLAG_SKIP"><code class="Dv">CTLFLAG_SKIP</code></a></dt> + <dd>When iterating the sysctl name space, do not list this sysctl.</dd> + <dt id="CTLFLAG_TUN"><a class="permalink" href="#CTLFLAG_TUN"><code class="Dv">CTLFLAG_TUN</code></a></dt> + <dd>Advisory flag that a system tunable also exists for this variable. The + initial sysctl value is fetched once from the system environment early + during module load or system boot.</dd> + <dt id="CTLFLAG_DYN"><a class="permalink" href="#CTLFLAG_DYN"><code class="Dv">CTLFLAG_DYN</code></a></dt> + <dd>Dynamically created OIDs automatically get this flag set.</dd> + <dt id="CTLFLAG_VNET"><a class="permalink" href="#CTLFLAG_VNET"><code class="Dv">CTLFLAG_VNET</code></a></dt> + <dd>OID references a VIMAGE-enabled variable.</dd> +</dl> +</section> +<section class="Sh"> +<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1> +<p class="Pp">Sample use of <code class="Fn">SYSCTL_DECL</code>() to declare the + <var class="Va">security</var> sysctl tree for use by new nodes:</p> +<div class="Bd Pp Bd-indent Li"> +<pre>SYSCTL_DECL(_security);</pre> +</div> +<p class="Pp">Examples of integer, opaque, string, and procedure sysctls + follow:</p> +<div class="Bd Pp Bd-indent Li"> +<pre>/* + * Example of a constant integer value. Notice that the control + * flags are CTLFLAG_RD, the variable pointer is SYSCTL_NULL_INT_PTR, + * and the value is declared. + */ +SYSCTL_INT(_kern, OID_AUTO, hz_max, CTLFLAG_RD, SYSCTL_NULL_INT_PTR, HZ_MAXIMUM, + "Maximum hz value supported"); + +/* + * Example of a variable integer value. Notice that the control + * flags are CTLFLAG_RW, the variable pointer is set, and the + * value is 0. + */ +static int doingcache = 1; /* 1 => enable the cache */ +SYSCTL_INT(_debug, OID_AUTO, vfscache, CTLFLAG_RW, &doingcache, 0, + "Enable name cache"); + +/* + * Example of a variable string value. Notice that the control + * flags are CTLFLAG_RW, that the variable pointer and string + * size are set. Unlike newer sysctls, this older sysctl uses a + * static oid number. + */ +char kernelname[MAXPATHLEN] = "/kernel"; /* XXX bloat */ +SYSCTL_STRING(_kern, KERN_BOOTFILE, bootfile, CTLFLAG_RW, + kernelname, sizeof(kernelname), "Name of kernel file booted"); + +/* + * Example of an opaque data type exported by sysctl. Notice that + * the variable pointer and size are provided, as well as a format + * string for sysctl(8). + */ +static l_fp pps_freq; /* scaled frequency offset (ns/s) */ +SYSCTL_OPAQUE(_kern_ntp_pll, OID_AUTO, pps_freq, CTLFLAG_RD, + &pps_freq, sizeof(pps_freq), "I", ""); + +/* + * Example of a procedure based sysctl exporting string + * information. Notice that the data type is declared, the NULL + * variable pointer and 0 size, the function pointer, and the + * format string for sysctl(8). + */ +SYSCTL_PROC(_kern_timecounter, OID_AUTO, hardware, CTLTYPE_STRING | + CTLFLAG_RW, NULL, 0, sysctl_kern_timecounter_hardware, "A", + "");</pre> +</div> +<p class="Pp">The following is an example of how to create a new top-level + category and how to hook up another subtree to an existing static node. This + example does not use contexts, which results in tedious management of all + intermediate oids, as they need to be freed later on:</p> +<div class="Bd Pp Bd-indent Li"> +<pre>#include <sys/sysctl.h> + ... +/* + * Need to preserve pointers to newly created subtrees, + * to be able to free them later: + */ +static struct sysctl_oid *root1; +static struct sysctl_oid *root2; +static struct sysctl_oid *oidp; +static int a_int; +static char *string = "dynamic sysctl"; + ... + +root1 = SYSCTL_ADD_ROOT_NODE(NULL, + OID_AUTO, "newtree", CTLFLAG_RW, 0, "new top level tree"); +oidp = SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(root1), + OID_AUTO, "newint", CTLFLAG_RW, &a_int, 0, "new int leaf"); + ... +root2 = SYSCTL_ADD_NODE(NULL, SYSCTL_STATIC_CHILDREN(_debug), + OID_AUTO, "newtree", CTLFLAG_RW, 0, "new tree under debug"); +oidp = SYSCTL_ADD_STRING(NULL, SYSCTL_CHILDREN(root2), + OID_AUTO, "newstring", CTLFLAG_RD, string, 0, "new string leaf");</pre> +</div> +<p class="Pp">This example creates the following subtrees:</p> +<div class="Bd Pp Bd-indent Li"> +<pre>debug.newtree.newstring +newtree.newint</pre> +</div> +<p class="Pp" id="Care"><a class="permalink" href="#Care"><i class="Em">Care + should be taken to free all OIDs once they are no longer needed!</i></a></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SYSCTL_NAMING"><a class="permalink" href="#SYSCTL_NAMING">SYSCTL + NAMING</a></h1> +<p class="Pp">When adding, modifying, or removing sysctl names, it is important + to be aware that these interfaces may be used by users, libraries, + applications, or documentation (such as published books), and are implicitly + published application interfaces. As with other application interfaces, + caution must be taken not to break existing applications, and to think about + future use of new name spaces so as to avoid the need to rename or remove + interfaces that might be depended on in the future.</p> +<p class="Pp">The semantics chosen for a new sysctl should be as clear as + possible, and the name of the sysctl must closely reflect its semantics. + Therefore the sysctl name deserves a fair amount of consideration. It should + be short but yet representative of the sysctl meaning. If the name consists + of several words, they should be separated by underscore characters, as in + <var class="Va">compute_summary_at_mount</var>. Underscore characters may be + omitted only if the name consists of not more than two words, each being not + longer than four characters, as in <var class="Va">bootfile</var>.</p> +<p class="Pp">For boolean sysctls, negative logic should be totally avoided. + That is, do not use names like <var class="Va">no_foobar</var> or + <var class="Va">foobar_disable</var>. They are confusing and lead to + configuration errors. Use positive logic instead: + <var class="Va">foobar</var>, <var class="Va">foobar_enable</var>.</p> +<p class="Pp">A temporary sysctl node OID that should not be relied upon must be + designated as such by a leading underscore character in its name. For + example: <var class="Va">_dirty_hack</var>.</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(3)</a>, <a class="Xr">sysctl(8)</a>, + <a class="Xr">device_get_sysctl(9)</a>, <a class="Xr">sysctl_add_oid(9)</a>, + <a class="Xr">sysctl_ctx_free(9)</a>, <a class="Xr">sysctl_ctx_init(9)</a>, + <a class="Xr">sysctl_remove_oid(9)</a></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> +<p class="Pp">The <a class="Xr">sysctl(8)</a> utility first appeared in + <span class="Ux">4.4BSD</span>. + <code class="Nm">SYSCTL_ADD_CONST_STRING</code> first appeared in + <span class="Ux">FreeBSD 12.1</span>.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> +<p class="Pp">The <code class="Nm">sysctl</code> implementation originally found + in <span class="Ux">BSD</span> has been extensively rewritten by + <span class="An">Poul-Henning Kamp</span> in order to add support for name + lookups, name space iteration, and dynamic addition of MIB nodes.</p> +<p class="Pp">This man page was written by <span class="An">Robert N. M. + Watson</span>.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SECURITY_CONSIDERATIONS"><a class="permalink" href="#SECURITY_CONSIDERATIONS">SECURITY + CONSIDERATIONS</a></h1> +<p class="Pp">When creating new sysctls, careful attention should be paid to the + security implications of the monitoring or management interface being + created. Most sysctls present in the kernel are read-only or writable only + by the superuser. Sysctls exporting extensive information on system data + structures and operation, especially those implemented using procedures, + will wish to implement access control to limit the undesired exposure of + information about other processes, network connections, etc.</p> +<p class="Pp">The following top level sysctl name spaces are commonly used:</p> +<dl class="Bl-tag"> + <dt id="compat"><var class="Va">compat</var></dt> + <dd>Compatibility layer information.</dd> + <dt id="debug"><var class="Va">debug</var></dt> + <dd>Debugging information. Various name spaces exist under + <var class="Va">debug</var>.</dd> + <dt id="hw"><var class="Va">hw</var></dt> + <dd>Hardware and device driver information.</dd> + <dt id="kern"><var class="Va">kern</var></dt> + <dd>Kernel behavior tuning; generally deprecated in favor of more specific + name spaces.</dd> + <dt id="machdep"><var class="Va">machdep</var></dt> + <dd>Machine-dependent configuration parameters.</dd> + <dt id="net"><var class="Va">net</var></dt> + <dd>Network subsystem. Various protocols have name spaces under + <var class="Va">net</var>.</dd> + <dt id="regression"><var class="Va">regression</var></dt> + <dd>Regression test configuration and information.</dd> + <dt id="security"><var class="Va">security</var></dt> + <dd>Security and security-policy configuration and information.</dd> + <dt id="sysctl"><var class="Va">sysctl</var></dt> + <dd>Reserved name space for the implementation of sysctl.</dd> + <dt id="user"><var class="Va">user</var></dt> + <dd>Configuration settings relating to user application behavior. Generally, + configuring applications using kernel sysctls is discouraged.</dd> + <dt id="vfs"><var class="Va">vfs</var></dt> + <dd>Virtual file system configuration and information.</dd> + <dt id="vm"><var class="Va">vm</var></dt> + <dd>Virtual memory subsystem configuration and information.</dd> +</dl> +</section> +</div> +<table class="foot"> + <tr> + <td class="foot-date">September 28, 2025</td> + <td class="foot-os">FreeBSD 15.0</td> + </tr> +</table> |
