---
name: "ng_ksocket"
section: "4"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/ng_ksocket"
---

# ng\_ksocket(4)

kernel socket netgraph node type

## NAME

**ng\_ksocket** – kernel socket netgraph node type

## SYNOPSIS

**#include \<sys/types.h\>**

**#include \<netgraph/ng\_ksocket.h\>**

## DESCRIPTION

A **ksocket** node is both a netgraph node and a BSD socket. The **ng\_ksocket** node type allows one to open a socket inside the kernel and have it appear as a Netgraph node. The **ng\_ksocket** node type is the reverse of the socket node type (see [ng\_socket(4)](/ng_socket/4.md)): 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 **ng\_ksocket** node type enables the kernel-level manipulation (via a Netgraph node) of what is normally a user-level entity (the associated socket).

A **ng\_ksocket** 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.

## HOOKS

This node type supports a single hook connection at a time. The name of the hook must be of the form *\<family\>/\<type\>/\<proto\>*, where the *family*, *type*, and *proto* are the decimal equivalent of the same arguments to [socket(2)](/socket/2.md). Alternately, aliases for the commonly used values are accepted as well. For example inet/dgram/udp is a more readable but equivalent version of 2/2/17.

Data received into socket is sent out via hook. Data received on hook is sent out from socket, if the latter is connected (an NGM\_KSOCKET\_CONNECT was sent to node before). If socket is not connected, destination *struct sockaddr* must be supplied in an mbuf tag with cookie NGM\_KSOCKET\_COOKIE and type NG\_KSOCKET\_TAG\_SOCKADDR attached to data. Otherwise **ng\_ksocket** will return ENOTCONN to sender.

## CONTROL MESSAGES

This node type supports the generic control messages, plus the following:

- NGM\_KSOCKET\_BIND

  This functions exactly like the [bind(2)](/bind/2.md) system call. The *struct sockaddr* socket address parameter should be supplied as an argument.

- NGM\_KSOCKET\_LISTEN

  This functions exactly like the [listen(2)](/listen/2.md) system call. The backlog parameter (a single 32 bit int) should be supplied as an argument.

- NGM\_KSOCKET\_CONNECT

  This functions exactly like the [connect(2)](/connect/2.md) system call. The *struct sockaddr* destination address parameter should be supplied as an argument.

- NGM\_KSOCKET\_ACCEPT

  Currently unimplemented.

- NGM\_KSOCKET\_GETNAME

  Equivalent to the [getsockname(2)](/getsockname/2.md) system call. The name is returned as a *struct sockaddr* in the arguments field of the reply.

- NGM\_KSOCKET\_GETPEERNAME

  Equivalent to the [getpeername(2)](/getpeername/2.md) system call. The name is returned as a *struct sockaddr* in the arguments field of the reply.

- NGM\_KSOCKET\_SETOPT

  Equivalent to the [setsockopt(2)](/setsockopt/2.md) system call, except that the option name, level, and value are passed in a *struct ng\_ksocket\_sockopt*.

- NGM\_KSOCKET\_GETOPT

  Equivalent to the [getsockopt(2)](/getsockopt/2.md) system call, except that the option is passed in a *struct ng\_ksocket\_sockopt*. When sending this command, the value field should be empty; upon return, it will contain the retrieved value.

## ASCII FORM CONTROL MESSAGES

For control messages that pass a *struct sockaddr* in the argument field, the normal ASCII equivalent of the C structure is an acceptable form. For the PF\_INET and 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 PF\_INET, the address is an IP address followed by an optional colon and port number. For PF\_LOCAL, the address is the pathname as a doubly quoted string.

Examples:

- PF\_LOCAL

  local/"/tmp/foo.socket"

- PF\_INET

  inet/192.168.1.1:1234

- Other

  { family=16 len=16 data=\[0x70 0x00 0x01 0x23\] }

For control messages that pass a *struct ng\_ksocket\_sockopt*, the normal ASCII form for that structure is used. In the future, more convenient encoding of the more common socket options may be supported.

## SHUTDOWN

This node shuts down upon receipt of a NGM\_SHUTDOWN control message, or when the hook is disconnected. Shutdown of the node closes the associated socket.

## SEE ALSO

[socket(2)](/socket/2.md), [netgraph(4)](/netgraph/4.md), [ng\_socket(4)](/ng_socket/4.md), [ngctl(8)](/ngctl/8.md), [mbuf\_tags(9)](/mbuf_tags/9.md)

## HISTORY

The **ng\_ksocket** node type was implemented in FreeBSD 4.0.

## AUTHORS

Archie Cobbs ⟨archie@FreeBSD.org⟩
