TAP(4) | Device Drivers Manual | TAP(4) |
tap
— Ethernet
tunnel pseudo-device
pseudo-device tun
#include <sys/types.h>
#include <net/if_tun.h>
The tap
driver provides an Ethernet
interface pseudo-device. Packets sent to this interface can be read by a
userland process and processed as desired. Packets written by the userland
process are injected back into the kernel networking subsystem.
A tap
interface can be created at runtime
using the ifconfig tap
N
create
command or by opening the character special
device /dev/tapN.
Each device has an exclusive open property: it cannot be opened if
it is already open and in use by another process. Each read returns at most
one packet; if insufficient buffer space is provided, the packet is
truncated. Each write supplies exactly one packet. Each packet read or
written is an Ethernet packet. The Ethernet CRC at the end of the frame is
not required. On the last close of the device, all queued packets are
discarded. If the device was created by opening
/dev/tapN, it will be automatically destroyed.
Devices created via
ifconfig(8) are only marked
as not running and traffic will be dropped returning
EHOSTDOWN
.
Writes never block. If the protocol queue is full, the packet is
dropped, a “collision” is counted, and
ENOBUFS
is returned.
In addition to the usual network interface ioctl commands
described in netintro(4),
the following special commands defined in
<net/if_tun.h>
are
supported:
TUNGIFINFO
struct tuninfo *TUNSIFINFO
struct tuninfo */* iface info */ struct tuninfo { u_int mtu; u_short type; u_short flags; u_int baudrate; };
flags sets the
interface flags, and can include one or more of
IFF_UP
, IFF_POINTOPOINT
,
IFF_MULTICAST
,
IFF_BROADCAST
. Flags given will be set; flags
omitted will be cleared; flags not in this list will not be changed even
when given. Flags default to IFF_BROADCAST
|
IFF_MULTICAST
.
It is an error to set both IFF_POINTOPOINT
and
IFF_BROADCAST
. type
defaults to IFT_ETHER
. This sets the interface
media address header type.
TUNSIFMODE
int *TUNSIFINFO
apply.
SIOCGIFADDR
uint8_t[ETHER_ADDR_LEN]SIOCSIFADDR
uint8_t[ETHER_ADDR_LEN]The generic ioctls FIONREAD
,
FIONBIO
, FIOASYNC
,
FIOSETOWN
, FIOGETOWN
are
supported by tap
.
If open fails, errno(2) may be set to one of:
If a write(2) call fails, errno(2) is set to one of:
EMSGSIZE
]ENOBUFS
]EAFNOSUPPORT
]Ioctl commands may fail with:
EINVAL
]IFF_POINTOPOINT
and
IFF_BROADCAST
with
TUNSIFMODE
.ENOTTY
]A read(2) call may fail because of:
EHOSTDOWN
]SIOCSIFADDR
.EWOULDBLOCK
]An attempt to send a packet out via the interface may fail with:
ioctl(2), inet(4), intro(4), netintro(4), hostname.if(5), ifconfig(8), netstart(8)
The tap
driver first appeared in
OpenBSD 5.9.
Claudio Jeker <claudio@openbsd.org>
March 23, 2021 | OpenBSD-7.0 |