tun(4)
NAME
tun - tunnel software network interface
SYNOPSIS
device tun
DESCRIPTION
- The tun interface is a software loopback mechanism that can
- be loosely
described as the network interface analog of the pty(4), - that is, tun
does for network interfaces what the pty(4) driver does for - terminals.
- The tun driver, like the pty(4) driver, provides two inter
- faces: an
interface like the usual facility it is simulating (a net - work interface
in the case of tun, or a terminal for pty(4)), and a charac - ter-special
device ``control'' interface. - The network interfaces are named ``tun0'', ``tun1'', etc.,
- one for each
control device that has been opened. These network inter - faces persist
until the if_tun.ko module is unloaded (if tun is built into - your kernel,
the network interfaces cannot be removed). - The tun interface permits opens on the special control de
- vice /dev/tun.
When this device is opened, tun will return a handle for the - lowest
unused tun device (use devname(3) to determine which). Con - trol devices
(once successfully opened) persist until if_tun.ko is un - loaded in the
same way that network interfaces persist (see above). - Each interface supports the usual network-interface
- ioctl(2)s, such as
SIOCSIFADDR and SIOCSIFNETMASK, and thus can be used with - ifconfig(8)
like any other interface. At boot time, they are POINTO - POINT interfaces,
but this can be changed; see the description of the control - device,
below. When the system chooses to transmit a packet on the - network
interface, the packet can be read from the control device - (it appears as
``input'' there); writing a packet to the control device - generates an
input packet on the network interface, as if the (non-exis - tent) hardware
had just received it. - The tunnel device (/dev/tunN) is exclusive-open (it cannot
- be opened if
it is already open). A read(2) call will return an error - (EHOSTDOWN) if
the interface is not ``ready'' (which means that the control - device is
open and the interface's address has been set). - Once the interface is ready, read(2) will return a packet if
- one is
available; if not, it will either block until one is or re - turn
EWOULDBLOCK, depending on whether non-blocking I/O has been - enabled. If
the packet is longer than is allowed for in the buffer - passed to read(2),
the extra data will be silently dropped. - If the TUNSLMODE ioctl has been set, packets read from the
- control device
will be prepended with the destination address as presented - to the network interface output routine, tunoutput(). The destination
- address is
in struct sockaddr format. The actual length of the - prepended address is
in the member sa_len. If the TUNSIFHEAD ioctl has been set, - packets will
be prepended with a four byte address family in network byte - order.
TUNSLMODE and TUNSIFHEAD are mutually exclusive. In any - case, the packet
data follows immediately. - A write(2) call passes a packet in to be ``received'' on the
- pseudointerface. If the TUNSIFHEAD ioctl has been set, the ad
- dress family must
be prepended, otherwise the packet is assumed to be of type - AF_INET.
Each write(2) call supplies exactly one packet; the packet - length is
taken from the amount of data provided to write(2) (minus - any supplied
address family). Writes will not block; if the packet can - not be accepted
for a transient reason (e.g., no buffer space available), it - is silently
dropped; if the reason is not transient (e.g., packet too - large), an
error is returned. - The following ioctl(2) calls are supported (defined in
- TUNSDEBUG The argument should be a pointer to an int;
- this sets the
- internal debugging variable to that value.
- What, if anything, this variable controls is not docu
- mented here; see
the source code. - TUNGDEBUG The argument should be a pointer to an int;
- this stores
- the internal debugging variable's value into
- it.
- TUNSIFINFO The argument should be a pointer to an
- struct tuninfo and
- allows setting the MTU, the type, and the
- baudrate of the
tunnel device. The struct tuninfo is de - clared in
- The use of this ioctl is restricted to the
- super-user.
- TUNGIFINFO The argument should be a pointer to an
- struct tuninfo,
- where the current MTU, type, and baudrate
- will be stored.
- TUNSIFMODE The argument should be a pointer to an int;
- its value
- must be either IFF_POINTOPOINT or IFF_BROAD
- CAST and
should have IFF_MULTICAST OR'd into the val - ue if multicast support is required. The type of the
- corresponding
``tunN'' interface is set to the supplied - type. If the
value is outside the above range, an EINVAL - error is
returned. The interface must be down at the - time; if it
is up, an EBUSY error is returned. - TUNSLMODE The argument should be a pointer to an int;
- a non-zero
- value turns off ``multi-af'' mode and turns
- on
``link-layer'' mode, causing packets read - from the tunnel
device to be prepended with the network des - tination
address (see above). - TUNSIFPID Will set the pid owning the tunnel device to
- the current
- process's pid.
- TUNSIFHEAD The argument should be a pointer to an int;
- a non-zero
- value turns off ``link-layer'' mode, and en
- ables
``multi-af'' mode, where every packet is - preceded with a
four byte address family. - TUNGIFHEAD The argument should be a pointer to an int;
- the ioctl
- sets the value to one if the device is in
- ``multi-af''
mode, and zero otherwise. - FIONBIO Turn non-blocking I/O for reads off or on,
- according as
- the argument int's value is or is not zero.
- (Writes are
always non-blocking.) - FIOASYNC Turn asynchronous I/O for reads (i.e., gen
- eration of
- SIGIO when data is available to be read) off
- or on,
according as the argument int's value is or - is not zero.
- FIONREAD If any packets are queued to be read, store
- the size of
- the first one into the argument int; other
- wise, store
zero. - TIOCSPGRP Set the process group to receive SIGIO sig
- nals, when
- asynchronous I/O is enabled, to the argument
- int value.
- TIOCGPGRP Retrieve the process group value for SIGIO
- signals into
- the argument int value.
- The control device also supports select(2) for read; select
- ing for write
is pointless, and always succeeds, since writes are always - non-blocking.
- On the last close of the data device, by default, the inter
- face is
brought down (as if with ifconfig tunN down). All queued - packets are
thrown away. If the interface is up when the data device is - not open
output packets are always thrown away rather than letting - them pile up.
SEE ALSO
AUTHORS
- This manual page was originally obtained from NetBSD.
- BSD June 5, 2001