diff options
Diffstat (limited to 'share/man/man4/ng_ksocket.4')
-rw-r--r-- | share/man/man4/ng_ksocket.4 | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/share/man/man4/ng_ksocket.4 b/share/man/man4/ng_ksocket.4 new file mode 100644 index 000000000000..d20ee4600430 --- /dev/null +++ b/share/man/man4/ng_ksocket.4 @@ -0,0 +1,236 @@ +.\" Copyright (c) 1999 Whistle Communications, Inc. +.\" All rights reserved. +.\" +.\" Subject to the following obligations and disclaimer of warranty, use and +.\" redistribution of this software, in source or object code forms, with or +.\" without modifications are expressly permitted by Whistle Communications; +.\" provided, however, that: +.\" 1. Any and all reproductions of the source or object code must include the +.\" copyright notice above and the following disclaimer of warranties; and +.\" 2. No rights are granted, in any manner or form, to use Whistle +.\" Communications, Inc. trademarks, including the mark "WHISTLE +.\" COMMUNICATIONS" on advertising, endorsements, or otherwise except as +.\" such appears in the above copyright notice or in the software. +.\" +.\" THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND +.\" TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO +.\" REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, +.\" INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +.\" WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY +.\" REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS +.\" SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. +.\" IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES +.\" RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING +.\" WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +.\" PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR +.\" SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY +.\" OF SUCH DAMAGE. +.\" +.\" Author: Archie Cobbs <archie@FreeBSD.org> +.\" +.\" $FreeBSD$ +.\" +.Dd October 28, 2005 +.Dt NG_KSOCKET 4 +.Os +.Sh NAME +.Nm ng_ksocket +.Nd kernel socket netgraph node type +.Sh SYNOPSIS +.In sys/types.h +.In netgraph/ng_ksocket.h +.Sh DESCRIPTION +A +.Nm ksocket +node is both a netgraph node and a +.Bx +socket. +The +.Nm +node type allows one to open a socket inside the kernel and have +it appear as a Netgraph node. +The +.Nm +node type is the reverse of the socket node type (see +.Xr ng_socket 4 ) : +whereas the socket node type enables the user-level manipulation (via +a socket) of what is normally a kernel-level entity (the associated +Netgraph node), the +.Nm +node type enables the kernel-level manipulation (via a Netgraph node) of +what is normally a user-level entity (the associated socket). +.Pp +A +.Nm +node allows at most one hook connection. +Connecting to the node is +equivalent to opening the associated socket. +The name given to the hook +determines what kind of socket the node will open (see below). +When the hook is disconnected and/or the node is shutdown, the +associated socket is closed. +.Sh HOOKS +This node type supports a single hook connection at a time. +The name of the hook must be of the form +.Em <family>/<type>/<proto> , +where the +.Em family , +.Em type , +and +.Em proto +are the decimal equivalent of the same arguments to +.Xr socket 2 . +Alternately, aliases for the commonly used values are accepted as +well. +For example +.Dv inet/dgram/udp +is a more readable but equivalent version of +.Dv 2/2/17 . +.Pp +Data received into socket is sent out via hook. +Data received on hook is sent out from socket, if the latter is +connected (an +.Dv NGM_KSOCKET_CONNECT +was sent to node before). +If socket is not connected, destination +.Vt "struct sockaddr" +must be supplied in an mbuf tag with cookie +.Dv NGM_KSOCKET_COOKIE +and type +.Dv NG_KSOCKET_TAG_SOCKADDR +attached to data. +Otherwise +.Nm +will return +.Er ENOTCONN +to sender. +.Sh CONTROL MESSAGES +This node type supports the generic control messages, plus the following: +.Bl -tag -width foo +.It Dv NGM_KSOCKET_BIND +This functions exactly like the +.Xr bind 2 +system call. +The +.Vt "struct sockaddr" +socket address parameter should be supplied as an argument. +.It Dv NGM_KSOCKET_LISTEN +This functions exactly like the +.Xr listen 2 +system call. +The backlog parameter (a single 32 bit +.Dv int ) +should be supplied as an argument. +.It Dv NGM_KSOCKET_CONNECT +This functions exactly like the +.Xr connect 2 +system call. +The +.Vt "struct sockaddr" +destination address parameter should be supplied as an argument. +.It Dv NGM_KSOCKET_ACCEPT +Equivalent to the +.Xr accept 2 +system call on a non-blocking socket. +If there is a pending connection on the queue, +a new socket and a corresponding cloned node are created. +Returned are the cloned node's ID and a peer name (as +.Vt "struct sockaddr" ) . +If there are no pending connections, +this control message returns nothing, +and a connected node will receive the above message asynchronously, +when a connection is established. +.Pp +A cloned node supports a single hook with an arbitrary name. +If not connected, a node disappears when its parent node is destroyed. +Once connected, it becomes an independent node. +.It Dv NGM_KSOCKET_GETNAME +Equivalent to the +.Xr getsockname 2 +system call. +The name is returned as a +.Vt "struct sockaddr" +in the arguments field of the reply. +.It Dv NGM_KSOCKET_GETPEERNAME +Equivalent to the +.Xr getpeername 2 +system call. +The name is returned as a +.Vt "struct sockaddr" +in the arguments field of the reply. +.It Dv NGM_KSOCKET_SETOPT +Equivalent to the +.Xr setsockopt 2 +system call, except that the option name, level, and value are passed in a +.Vt "struct ng_ksocket_sockopt" . +.It Dv NGM_KSOCKET_GETOPT +Equivalent to the +.Xr getsockopt 2 +system call, except that the option is passed in a +.Vt "struct ng_ksocket_sockopt" . +When sending this command, the +.Dv value +field should be empty; upon return, it will contain the +retrieved value. +.El +.Sh ASCII FORM CONTROL MESSAGES +For control messages that pass a +.Vt "struct sockaddr" +in the argument field, the normal +.Tn ASCII +equivalent of the C structure +is an acceptable form. +For the +.Dv PF_INET +and +.Dv PF_LOCAL +address families, a more convenient form is also used, which is +the protocol family name, followed by a slash, followed by the actual +address. +For +.Dv PF_INET , +the address is an IP address followed by an optional colon and port number. +For +.Dv PF_LOCAL , +the address is the pathname as a doubly quoted string. +.Pp +Examples: +.Bl -tag -width XXXXXXXXXX +.It Dv PF_LOCAL +local/"/tmp/foo.socket" +.It Dv PF_INET +inet/192.168.1.1:1234 +.It Other +.Dv "\&{ family=16 len=16 data=[0x70 0x00 0x01 0x23] \&}" +.El +.Pp +For control messages that pass a +.Vt "struct ng_ksocket_sockopt" , +the normal +.Tn ASCII +form for that structure is used. +In the future, more +convenient encoding of the more common socket options may be supported. +.Sh SHUTDOWN +This node shuts down upon receipt of a +.Dv NGM_SHUTDOWN +control message, or when the hook is disconnected. +Shutdown of the node closes the associated socket. +.Sh SEE ALSO +.Xr socket 2 , +.Xr netgraph 4 , +.Xr ng_socket 4 , +.Xr ngctl 8 , +.Xr mbuf_tags 9 , +.Xr socket 9 +.Sh HISTORY +The +.Nm +node type was implemented in +.Fx 4.0 . +.Sh AUTHORS +.An Archie Cobbs Aq archie@FreeBSD.org |