summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2024-11-13 12:58:30 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2024-11-13 12:58:30 +0000
commit895dbf0f3cc5cbd0db102482914cbdacc10a2582 (patch)
tree8a7fe88490e317f7da6a07a35814711888a79a58
parent6954f6510382cc11f37ac28c1d3ef04ae86480b2 (diff)
merge tap(4) into tun(4). it's the one driver providing both interfaces.
ok and tweaks from claudio@ and jmc@
-rw-r--r--share/man/man4/Makefile4
-rw-r--r--share/man/man4/tap.4222
-rw-r--r--share/man/man4/tun.4192
3 files changed, 106 insertions, 312 deletions
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 19306d560e8..41fb48b9da0 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.853 2024/11/05 11:12:48 miod Exp $
+# $OpenBSD: Makefile,v 1.854 2024/11/13 12:58:29 dlg Exp $
MAN= aac.4 abcrtc.4 abl.4 ac97.4 acphy.4 acrtc.4 \
acpi.4 acpiac.4 acpials.4 acpiasus.4 acpibat.4 \
@@ -95,7 +95,7 @@ MAN= aac.4 abcrtc.4 abl.4 ac97.4 acphy.4 acrtc.4 \
tascodec.4 tcic.4 tcp.4 tcpci.4 termios.4 tht.4 ti.4 tipd.4 \
tipmic.4 titmp.4 tl.4 \
tlphy.4 thmc.4 tpm.4 tpmr.4 tqphy.4 trm.4 trunk.4 tsl.4 tty.4 \
- tun.4 tap.4 twe.4 \
+ tun.4 twe.4 \
txp.4 txphy.4 uaudio.4 uaq.4 uark.4 uath.4 ubcmtp.4 uberry.4 ubsa.4 \
ucc.4 ucom.4 uchcom.4 ucrcom.4 ucycom.4 ukspan.4 uslhcom.4 \
udav.4 udcf.4 udl.4 udp.4 udsbr.4 ufshci.4 \
diff --git a/share/man/man4/tap.4 b/share/man/man4/tap.4
deleted file mode 100644
index 92d3496ebe0..00000000000
--- a/share/man/man4/tap.4
+++ /dev/null
@@ -1,222 +0,0 @@
-.\" $OpenBSD: tap.4,v 1.5 2021/03/23 16:26:53 claudio Exp $
-.\"
-.\" Copyright (c) 2003 Marcus D. Watts All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, and the entire permission notice in its entirety,
-.\" including the disclaimer of warranties.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. The name of the author may not be used to endorse or promote
-.\" products derived from this software without specific prior
-.\" written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-.\" MARCUS D. WATTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-.\" OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-.\" ON 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-.\"
-.Dd $Mdocdate: March 23 2021 $
-.Dt TAP 4
-.Os
-.Sh NAME
-.Nm tap
-.Nd Ethernet tunnel pseudo-device
-.Sh SYNOPSIS
-.Cd "pseudo-device tun"
-.Pp
-.In sys/types.h
-.In net/if_tun.h
-.Sh DESCRIPTION
-The
-.Nm
-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.
-.Pp
-A
-.Nm
-interface can be created at runtime using the
-.Ic ifconfig tap Ns Ar N Ic create
-command or by opening the character special device
-.Pa /dev/tapN .
-.Pp
-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
-.Pa /dev/tapN ,
-it will be automatically destroyed.
-Devices created via
-.Xr ifconfig 8
-are only marked as not running and traffic will be dropped returning
-.Er EHOSTDOWN .
-.Pp
-Writes never block.
-If the protocol queue is full, the packet is dropped, a
-.Dq collision
-is counted, and
-.Er ENOBUFS
-is returned.
-.Pp
-In addition to the usual network interface
-ioctl commands described in
-.Xr netintro 4 ,
-the following special commands defined in
-.In net/if_tun.h
-are supported:
-.Pp
-.Bl -tag -width indent -compact
-.It Dv TUNGIFINFO Fa "struct tuninfo *"
-.It Dv TUNSIFINFO Fa "struct tuninfo *"
-Get or set the interface characteristics.
-.Bd -literal
-/* iface info */
-struct tuninfo {
- u_int mtu;
- u_short type;
- u_short flags;
- u_int baudrate;
-};
-.Ed
-.Pp
-.Va flags
-sets the interface flags, and
-can include one or more of
-.Dv IFF_UP ,
-.Dv IFF_POINTOPOINT ,
-.Dv IFF_MULTICAST ,
-.Dv 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
-.Dv IFF_BROADCAST | IFF_MULTICAST .
-It is an error to set both
-.Dv IFF_POINTOPOINT
-and
-.Dv IFF_BROADCAST .
-.\" should say what type affects...
-.Va type
-defaults to
-.Dv IFT_ETHER .
-This sets the interface media address header type.
-.Pp
-.It Dv TUNSIFMODE Fa int *
-Set just the interface flags.
-The same restrictions as for
-.Dv TUNSIFINFO
-apply.
-.Pp
-.It Dv SIOCGIFADDR Fa uint8_t Ns [ETHER_ADDR_LEN]
-.It Dv SIOCSIFADDR Fa uint8_t Ns [ETHER_ADDR_LEN]
-Get or set the link layer address (MAC address) of the interface.
-.El
-.Pp
-The generic ioctls
-.Dv FIONREAD ,
-.Dv FIONBIO ,
-.Dv FIOASYNC ,
-.Dv FIOSETOWN ,
-.Dv FIOGETOWN
-are supported by
-.Nm .
-.Sh FILES
-.Bl -tag -width /dev/tap* -compact
-.It Pa /dev/tap*
-.El
-.Sh ERRORS
-If open fails,
-.Xr errno 2
-may be set to one of:
-.Bl -tag -width Er
-.It Bq Er ENXIO
-Not that many devices configured.
-.It Bq Er EBUSY
-Device was already open.
-.El
-.Pp
-If a
-.Xr write 2
-call fails,
-.Xr errno 2
-is set to one of:
-.Bl -tag -width Er
-.It Bq Er EMSGSIZE
-The packet supplied was too small or too large.
-The maximum sized packet allowed is currently 16384 bytes.
-.It Bq Er ENOBUFS
-There were no mbufs, or
-the queue for the outgoing protocol is full.
-.It Bq Er EAFNOSUPPORT
-The address family specified in the tunnel header was not
-recognized.
-.El
-.Pp
-Ioctl commands may fail with:
-.Bl -tag -width Er
-.It Bq Er EINVAL
-Attempt to set both
-.Dv IFF_POINTOPOINT
-and
-.Dv IFF_BROADCAST
-with
-.Dv TUNSIFMODE .
-.It Bq Er ENOTTY
-Unrecognized ioctl command.
-.El
-.Pp
-A
-.Xr read 2
-call may fail because of:
-.Bl -tag -width Er
-.It Bq Er EHOSTDOWN
-The device is not ready.
-The device must have an
-.Xr inet 4
-interface address assigned to it, such as via
-.Dv SIOCSIFADDR .
-.It Bq Er EWOULDBLOCK
-Non-blocking I/O was selected and no packets were available.
-.El
-.Pp
-An attempt to send a packet out via the interface may fail with:
-.Bl -tag -width Er
-.It Bq Er EHOSTDOWN
-The device is not ready.
-The device must have an
-.Xr inet 4
-interface address assigned to it, such as via
-.Dv SIOCSIFADDR .
-.El
-.Sh SEE ALSO
-.Xr ioctl 2 ,
-.Xr inet 4 ,
-.Xr intro 4 ,
-.Xr netintro 4 ,
-.Xr hostname.if 5 ,
-.Xr ifconfig 8 ,
-.Xr netstart 8
-.Sh HISTORY
-The
-.Nm
-driver first appeared in
-.Ox 5.9 .
-.Sh AUTHORS
-.An Claudio Jeker Aq Mt claudio@openbsd.org
diff --git a/share/man/man4/tun.4 b/share/man/man4/tun.4
index 9bae0ff4c89..89f1a9089c5 100644
--- a/share/man/man4/tun.4
+++ b/share/man/man4/tun.4
@@ -1,4 +1,4 @@
-.\" $OpenBSD: tun.4,v 1.45 2020/01/09 09:25:16 claudio Exp $
+.\" $OpenBSD: tun.4,v 1.46 2024/11/13 12:58:29 dlg Exp $
.\"
.\" Copyright (c) 2003 Marcus D. Watts All rights reserved.
.\"
@@ -26,11 +26,12 @@
.\" TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
.\" USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd $Mdocdate: January 9 2020 $
+.Dd $Mdocdate: November 13 2024 $
.Dt TUN 4
.Os
.Sh NAME
-.Nm tun
+.Nm tun ,
+.Nm tap
.Nd network tunnel pseudo-device
.Sh SYNOPSIS
.Cd "pseudo-device tun"
@@ -39,39 +40,45 @@
.In net/if_tun.h
.Sh DESCRIPTION
The
-.Nm
-driver provides a network 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.
+.Nm tun
+pseudo-device driver provides character special devices for
+communicating with the kernel network stack via the
+.Nm tun
+and
+.Nm tap
+network interfaces.
+Packets sent to these interfaces can be read from the device special
+file by a userland process and processed as desired.
+Packets written to the device special file by the userland process
+are injected back into the kernel networking subsystem.
.Pp
-A
-.Nm
-interface can be created at runtime using the
-.Ic ifconfig tun Ns Ar N Ic create
-command or by opening the character special device
-.Pa /dev/tunN .
-By default
-.Nm
-operates as a point-to-point interface.
+.Nm tun
+and
+.Nm tap
+interfaces can be created at runtime using the
+.Ic ifconfig iface Ns Ar N Ic create
+command, or by opening the character special devices
+.Pa /dev/tunN
+or
+.Pa /dev/tapN
+respectively.
+.Pp
+The minor number of the device special files are associated with
+the unit number of the network interfaces.
.Pp
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 prefixed with a tunnel header consisting of
-a 4-byte network byte order integer containing the address family.
-On the last close of the device, all queued packets are discarded.
-If the device was created by opening
-.Pa /dev/tunN ,
+On the last close of the device all queued packets are discarded.
+If the device was created by opening a device special file
it will be automatically destroyed.
-Devices created via
+The last close of a device special file associated with an interface
+created via
.Xr ifconfig 8
-are only marked as not running and traffic will be dropped returning
-.Er EHOSTDOWN .
+will be marked as not running and traffic sent out the will be dropped.
.Pp
+Each read returns at most one packet; if insufficient
+buffer space is provided, the packet is truncated.
+Each write supplies exactly one packet.
Writes never block.
If the protocol queue is full, the packet is dropped, a
.Dq collision
@@ -79,9 +86,9 @@ is counted, and
.Er ENOBUFS
is returned.
.Pp
-In addition to the usual network interface ioctl commands described in
-.Xr netintro 4 ,
-the following special commands defined in
+The following
+.Xr ioctl 2
+special commands defined in
.In net/if_tun.h
are supported:
.Pp
@@ -100,31 +107,14 @@ struct tuninfo {
.Ed
.Pp
.Va flags
-sets the interface flags, and
-can include one or more of
-.Dv IFF_UP ,
-.Dv IFF_POINTOPOINT ,
-.Dv IFF_MULTICAST ,
-.Dv 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
-.Dv IFF_POINTOPOINT .
-It is an error to set both
-.Dv IFF_POINTOPOINT
and
-.Dv IFF_BROADCAST .
-.\" should say what type affects...
.Va type
-defaults to
-.Dv IFT_TUNNEL .
-This sets the interface media address header type.
+are set by the kernel when an interface is created,
+and must be set to the same values that the kernel provided.
.Pp
.It Dv TUNSIFMODE Fa int *
-Set just the interface flags.
-The same restrictions as for
-.Dv TUNSIFINFO
-apply.
+is provided for backwards compatibiliy.
+The flags set must match what the kernel initialised them to.
.El
.Pp
The generic ioctls
@@ -133,11 +123,41 @@ The generic ioctls
.Dv FIOASYNC ,
.Dv FIOSETOWN ,
.Dv FIOGETOWN
-are supported by
-.Nm .
+are also supported.
+.Ss Point-to-Point Layer 3 tunnel interface (tun)
+Each packet read from or written to a
+.Nm tun
+interface is prefixed with a tunnel header consisting of
+a 4-byte network byte order integer containing the address family of
+the packet.
+.Nm tun
+supports
+.Dv AF_INET ,
+.Dv AF_INET6 ,
+and
+.Dv AF_MPLS
+packets.
+.Ss Ethernet tunnel interface (tap)
+Each packet read from or written to a
+.Nm tap
+interface is an Ethernet packet.
+The Ethernet CRC at the end of the frame is not required.
+.Pp
+The device special files for
+.Nm tap
+interfaces support the following additional
+.Xr ioctl 2
+commands:
+.Pp
+.Bl -tag -width indent -compact
+.It Dv SIOCGIFADDR Fa uint8_t Ns [ETHER_ADDR_LEN]
+.It Dv SIOCSIFADDR Fa uint8_t Ns [ETHER_ADDR_LEN]
+Get or set the link layer address (MAC address) of the interface.
+.El
.Sh FILES
.Bl -tag -width /dev/tun* -compact
.It Pa /dev/tun*
+.It Pa /dev/tap*
.El
.Sh ERRORS
If open fails,
@@ -146,6 +166,7 @@ may be set to one of:
.Bl -tag -width Er
.It Bq Er ENXIO
Not that many devices configured.
+.\" The associated interface existed, but is being destroyed.
.It Bq Er EBUSY
Device was already open.
.El
@@ -159,27 +180,17 @@ is set to one of:
.It Bq Er EMSGSIZE
The packet supplied was too small or too large.
The maximum sized packet allowed is currently 16384 bytes.
-.It Bq Er ENOBUFS
-There were no mbufs, or
-the queue for the outgoing protocol is full.
-.It Bq Er EAFNOSUPPORT
-The address family specified in the tunnel header was not
-recognized.
+.It Bq Er ENOMEM
+There were no mbufs.
+.\" .It Bq Er ENOBUFS
+.\" The queue for the outgoing protocol is full.
.El
.Pp
-Ioctl commands may fail with:
+.Xr ioctl 2
+commands may fail with:
.Bl -tag -width Er
.It Bq Er EINVAL
-Attempt to set both
-.Dv IFF_POINTOPOINT
-and
-.Dv IFF_BROADCAST
-with
-.Dv TUNSIFMODE
-or using
-.Dv SIOCGIFADDR
-or
-.Dv SIOCSIFADDR .
+Invalid parameters were specified.
.It Bq Er ENOTTY
Unrecognized ioctl command.
.El
@@ -188,25 +199,11 @@ A
.Xr read 2
call may fail because of:
.Bl -tag -width Er
-.It Bq Er EHOSTDOWN
-The device is not ready.
-The device must have an
-.Xr inet 4
-interface address assigned to it, such as via
-.Dv SIOCSIFADDR .
+.It Bq Er EIO
+The associated interface has been destroyed.
.It Bq Er EWOULDBLOCK
Non-blocking I/O was selected and no packets were available.
.El
-.Pp
-An attempt to send a packet out via the interface may fail with:
-.Bl -tag -width Er
-.It Bq Er EHOSTDOWN
-The device is not ready.
-The device must have an
-.Xr inet 4
-interface address assigned to it, such as via
-.Dv SIOCSIFADDR .
-.El
.Sh SEE ALSO
.Xr ioctl 2 ,
.Xr inet 4 ,
@@ -215,3 +212,22 @@ interface address assigned to it, such as via
.Xr hostname.if 5 ,
.Xr ifconfig 8 ,
.Xr netstart 8
+.Sh HISTORY
+.Nm tun
+interfaces originally supported both Layer 3 and Ethernet packets
+by reconfiguring the type of interface with
+.Dv TUNSIFINFO .
+Ethernet packet support was split into the separate
+.Nm tap
+interface in
+.Ox 5.9 .
+.Sh AUTHORS
+.Nm tun
+was written by
+.An Julian Onions Aq Mt Julian.Onions@nexor.co.uk
+at Nottingham University.
+.Pp
+The
+.Nm tap
+interface functionality was written by
+.An Claudio Jeker Aq Mt claudio@openbsd.org .