summaryrefslogtreecommitdiff
path: root/static/freebsd/man9/domain.9 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man9/domain.9 3.html')
-rw-r--r--static/freebsd/man9/domain.9 3.html194
1 files changed, 0 insertions, 194 deletions
diff --git a/static/freebsd/man9/domain.9 3.html b/static/freebsd/man9/domain.9 3.html
deleted file mode 100644
index 70233fd5..00000000
--- a/static/freebsd/man9/domain.9 3.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">DOMAIN(9)</td>
- <td class="head-vol">Kernel Developer's Manual</td>
- <td class="head-rtitle">DOMAIN(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">domain</code>, <code class="Nm">protosw</code>
- &#x2014; <span class="Nd">programming interface for kernel socket
- implementation</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/param.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/kernel.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/protosw.h</a>&gt;</code>
- <br/>
- <code class="In">#include &lt;<a class="In">sys/domain.h</a>&gt;</code></p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">domain_add</code>(<var class="Fa" style="white-space: nowrap;">struct
- domain *dom</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">domain_remove</code>(<var class="Fa" style="white-space: nowrap;">struct
- domain *dom</var>);</p>
-<p class="Pp"><var class="Ft">void</var>
- <br/>
- <code class="Fn">DOMAIN_SET</code>(<var class="Fa" style="white-space: nowrap;">domain</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">protosw_register</code>(<var class="Fa" style="white-space: nowrap;">struct
- domain *dom</var>, <var class="Fa" style="white-space: nowrap;">struct
- protosw *pr</var>);</p>
-<p class="Pp"><var class="Ft">int</var>
- <br/>
- <code class="Fn">protosw_unregister</code>(<var class="Fa" style="white-space: nowrap;">struct
- protosw *pr</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">domain</code> subsystem allows implementation
- of communication protocols that are exposed to the userland via the
- <a class="Xr">socket(2)</a> API. When an application performs a
- <a class="permalink" href="#socket"><code class="Fn" id="socket">socket</code></a>(<var class="Fa">domain</var>,
- <var class="Fa">type</var>, <var class="Fa">protocol</var>) syscall, the
- kernel searches for a <code class="Nm">domain</code> matching the
- <var class="Ar">domain</var> argument, then within this domain, searches for
- a protocol matching <var class="Ar">type</var>. If the third argument,
- <var class="Ar">protocol</var>, is not <code class="Dv">0</code>, that value
- must also match. The structure found must implement certain methods, so that
- <a class="Xr">socket(2)</a> API works for this particular kind of a
- socket.</p>
-<p class="Pp">A minimal <code class="Nm">domain</code> structure implementing a
- domain shall be initialized with sparse C99 initializer and has public
- fields as follows:</p>
-<div class="Bd Pp Li">
-<pre>struct domain {
- /*
- * Mandatory fields.
- */
- int dom_family; /* PF_xxx, first argument of socket(2) */
- char *dom_name; /* text name of the domain */
- u_int dom_nprotosw; /* length of dom_protosw[] */
- /*
- * Following methods are optional.
- */
- int (*dom_probe)(void); /* check for support */
- struct rib_head *(*dom_rtattach)(uint32_t); /* init route table */
- void (*dom_rtdetach)(struct rib_head *); /* clean up table */
- void *(*dom_ifattach)(struct ifnet *); /* interface attach */
- void (*dom_ifdetach)(struct ifnet *, void *);/* &amp; detach callbacks */
- int (*dom_ifmtu)(struct ifnet *); /* mtu change */
- /*
- * Mandatory variable size array of pointers to protosw structs.
- */
- struct protosw *dom_protosw[];
-};</pre>
-</div>
-<p class="Pp">Each domain contains the <var class="Va">dom_protosw</var> array
- of protocol switch structures (<var class="Vt">struct protosw *</var>), one
- for each socket type supported. The array may have
- <code class="Dv">NULL</code> spacers for loadable protocols. Sparse C99
- initializers shall be used to initialize <code class="Nm">protosw</code>
- structures. The structure has mandatory field <var class="Va">pr_type</var>
- and mandatory <var class="Va">pr_attach</var> method. The rest of the
- methods are optional, but a meaningful protocol should implement some.</p>
-<div class="Bd Pp Li">
-<pre>struct protosw {
- short pr_type; /* second argument of socket(2) */
- short pr_protocol; /* third argument of socket(2) or 0 */
- short pr_flags; /* see protosw.h */
- pr_soreceive_t *pr_soreceive; /* recv(2) */
- pr_rcvd_t *pr_rcvd; /* soreceive_generic() if PR_WANTRCV */
- pr_sosend_t *pr_sosend; /* send(2) */
- pr_send_t *pr_send; /* send(2) via sosend_generic() */
- pr_ready_t *pr_ready; /* sendfile/ktls readyness */
- pr_sopoll_t *pr_sopoll; /* poll(2) */
- pr_attach_t *pr_attach; /* creation: socreate(), sonewconn() */
- pr_detach_t *pr_detach; /* destruction: sofree() */
- pr_connect_t *pr_connect; /* connect(2) */
- pr_disconnect_t *pr_disconnect; /* sodisconnect() */
- pr_close_t *pr_close; /* close(2) */
- pr_shutdown_t *pr_shutdown; /* shutdown(2) */
- pr_abort_t *pr_abort; /* abrupt tear down: soabort() */
- pr_aio_queue_t *pr_aio_queue; /* aio(9) */
- pr_bind_t *pr_bind; /* bind(2) */
- pr_bindat_t *pr_bindat; /* bindat(2) */
- pr_listen_t *pr_listen; /* listen(2) */
- pr_accept_t *pr_accept; /* accept(2) */
- pr_connectat_t *pr_connectat; /* connectat(2) */
- pr_connect2_t *pr_connect2; /* socketpair(2) */
- pr_control_t *pr_control; /* ioctl(2) */
- pr_rcvoob_t *pr_rcvoob; /* soreceive_rcvoob() */
- pr_ctloutput_t *pr_ctloutput; /* control output (from above) */
- pr_peeraddr_t *pr_peeraddr; /* getpeername(2) */
- pr_sockaddr_t *pr_sockaddr; /* getsockname(2) */
- pr_sense_t *pr_sense; /* stat(2) */
-};</pre>
-</div>
-<p class="Pp">The following functions handle the registration of new domains and
- protocols.</p>
-<p class="Pp" id="domain_add"><a class="permalink" href="#domain_add"><code class="Fn">domain_add</code></a>()
- adds a new protocol domain to the system. In most cases
- <code class="Fn">domain_add</code>() is not called directly, instead
- <a class="permalink" href="#DOMAIN_SET"><code class="Fn" id="DOMAIN_SET">DOMAIN_SET</code></a>()
- is used, which is a wrapper around
- <a class="permalink" href="#SYSINIT"><code class="Fn" id="SYSINIT">SYSINIT</code></a>()
- macro. If the new domain has defined a <var class="Va">dom_probe</var>
- routine, it is called first in <code class="Fn">domain_add</code>() to
- determine if the domain should be supported on the current system. If the
- probe routine returns a non-0 value, then the domain will not be added. Once
- a domain is added it cannot be completely unloaded. This is because there is
- no reference counting system in place to determine if there are any active
- references from sockets within that domain. However, the experimental
- <a class="permalink" href="#domain_remove"><code class="Fn" id="domain_remove">domain_remove</code></a>()
- exists, and unloadable domains may be supported in the future.</p>
-<p class="Pp" id="protosw_register"><a class="permalink" href="#protosw_register"><code class="Fn">protosw_register</code></a>()
- dynamically adds a protocol to a domain, if the latter has an empty slot in
- its <var class="Va">dom_protosw</var>. Dynamically added protocol can later
- be unloaded with
- <a class="permalink" href="#protosw_unregister"><code class="Fn" id="protosw_unregister">protosw_unregister</code></a>().</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="RETURN_VALUES"><a class="permalink" href="#RETURN_VALUES">RETURN
- VALUES</a></h1>
-<p class="Pp">The <code class="Fn">domain_add</code>() never fails, but it may
- not add a domain if its <var class="Va">dom_probe</var> fails.</p>
-<p class="Pp">The <code class="Fn">protosw_register</code>() function may fail
- if:</p>
-<dl class="Bl-tag">
- <dt>[<code class="Er">EEXIST</code>]</dt>
- <dd>A protocol with the same value of <var class="Va">pr_type</var> and
- <var class="Va">pr_protocol</var> already exists in the domain.</dd>
- <dt>[<code class="Er">ENOMEM</code>]</dt>
- <dd>The domain doesn't have any NULL slots in its
- <var class="Va">dom_protosw</var>.</dd>
-</dl>
-</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">socket(2)</a>, <a class="Xr">SYSINIT(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">domain</code> subsystem first appeared in
- <span class="Ux">4.3BSD</span> as the part of the very first
- <a class="Xr">socket(2)</a> API implementation.</p>
-<p class="Pp">The <code class="Nm">domain</code> subsystem and this manual page
- were significantly rewritten in <span class="Ux">FreeBSD 14</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Chad David</span>
- &lt;<a class="Mt" href="mailto:davidc@acns.ab.ca">davidc@acns.ab.ca</a>&gt;
- and
- <br/>
- <span class="An">Gleb Smirnoff</span>
- &lt;<a class="Mt" href="mailto:glebius@FreeBSD.org">glebius@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">September 14, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>