]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man4/tap.4
This commit was generated by cvs2svn to compensate for changes in r169808,
[FreeBSD/FreeBSD.git] / share / man / man4 / tap.4
1 .\" $FreeBSD$
2 .\" Based on PR#2411
3 .\"
4 .Dd March 19, 2007
5 .Os
6 .Dt TAP 4
7 .Sh NAME
8 .Nm tap
9 .Nd Ethernet tunnel software network interface
10 .Sh SYNOPSIS
11 .Cd device tap
12 .Sh DESCRIPTION
13 The
14 .Nm
15 interface is a software loopback mechanism that can be loosely
16 described as the network interface analog of the
17 .Xr pty 4 ,
18 that is,
19 .Nm
20 does for network interfaces what the
21 .Nm pty
22 driver does for terminals.
23 .Pp
24 The
25 .Nm
26 driver, like the
27 .Nm pty
28 driver, provides two interfaces: an interface like the usual facility
29 it is simulating
30 (an Ethernet network interface in the case of
31 .Nm ,
32 or a terminal for
33 .Nm pty ) ,
34 and a character-special device
35 .Dq control
36 interface.
37 .Pp
38 The network interfaces are named
39 .Dq Li tap0 ,
40 .Dq Li tap1 ,
41 etc., one for each control device that has been opened.
42 These Ethernet network interfaces persist until
43 .Pa if_tap.ko
44 module is unloaded, or until removed with "ifconfig destroy" (see below).
45 .Pp
46 .Nm
47 devices are created using interface cloning.
48 This is done using the
49 .Dq ifconfig tap Ns Sy N No create
50 command.
51 This is the preferred method of creating
52 .Nm
53 devices.
54 The same method allows removal of interfaces.
55 For this, use the
56 .Dq ifconfig tap Ns Sy N No destroy
57 command.
58 .Pp
59 If the
60 .Xr sysctl 8
61 variable
62 .Va net.link.tap.devfs_cloning
63 is non-zero, the
64 .Nm
65 interface
66 permits opens on the special control device
67 .Pa /dev/tap .
68 When this device is opened,
69 .Nm
70 will return a handle for the lowest unused
71 .Nm
72 device (use
73 .Xr devname 3
74 to determine which).
75 .Pp
76 .Bf Em
77 Disabling the legacy devfs cloning functionality may break existing
78 applications which use
79 .Nm ,
80 such as
81 .Tn VMware
82 and
83 .Xr ssh 1 .
84 It therefore defaults to being enabled until further notice.
85 .Ef
86 .Pp
87 Control devices (once successfully opened) persist until
88 .Pa if_tap.ko
89 is unloaded or the interface is destroyed.
90 .Pp
91 Each interface supports the usual Ethernet network interface
92 .Xr ioctl 2 Ns s ,
93 such as
94 .Dv SIOCSIFADDR
95 and
96 .Dv SIOCSIFNETMASK ,
97 and thus can be used with
98 .Xr ifconfig 8
99 like any other Ethernet interface.
100 When the system chooses to transmit
101 an Ethernet frame on the network interface, the frame can be read from
102 the control device
103 (it appears as
104 .Dq input
105 there);
106 writing an Ethernet frame to the control device generates an input frame on
107 the network interface, as if the
108 (non-existent)
109 hardware had just received it.
110 .Pp
111 The Ethernet tunnel device, normally
112 .Pa /dev/tap Ns Sy N ,
113 is exclusive-open
114 (it cannot be opened if it is already open)
115 and is restricted to the super-user, unless the
116 .Xr sysctl 8
117 variable
118 .Va net.link.tap.user_open
119 is non-zero.
120 If the
121 .Xr sysctl 8
122 variable
123 .Va net.link.tap.up_on_open
124 is non-zero, the tunnel device will be marked
125 .Dq up
126 when the control device is opened.
127 A
128 .Fn read
129 call will return an error
130 .Pq Er EHOSTDOWN
131 if the interface is not
132 .Dq ready .
133 Once the interface is ready,
134 .Fn read
135 will return an Ethernet frame if one is available; if not, it will
136 either block until one is or return
137 .Er EWOULDBLOCK ,
138 depending on whether non-blocking I/O has been enabled.
139 If the frame
140 is longer than is allowed for in the buffer passed to
141 .Fn read ,
142 the extra data will be silently dropped.
143 .Pp
144 A
145 .Xr write 2
146 call passes an Ethernet frame in to be
147 .Dq received
148 on the pseudo-interface.
149 Each
150 .Fn write
151 call supplies exactly one frame; the frame length is taken from the
152 amount of data provided to
153 .Fn write .
154 Writes will not block; if the frame cannot be accepted
155 for a transient reason
156 (e.g., no buffer space available),
157 it is silently dropped; if the reason is not transient
158 (e.g., frame too large),
159 an error is returned.
160 The following
161 .Xr ioctl 2
162 calls are supported
163 (defined in
164 .In net/if_tap.h ) :
165 .Bl -tag -width VMIO_SIOCSETMACADDR
166 .It Dv TAPSDEBUG
167 The argument should be a pointer to an
168 .Va int ;
169 this sets the internal debugging variable to that value.
170 What, if
171 anything, this variable controls is not documented here; see the source
172 code.
173 .It Dv TAPGDEBUG
174 The argument should be a pointer to an
175 .Va int ;
176 this stores the internal debugging variable's value into it.
177 .It Dv FIONBIO
178 Turn non-blocking I/O for reads off or on, according as the argument
179 .Va int Ns 's
180 value is or is not zero
181 (Writes are always nonblocking).
182 .It Dv FIOASYNC
183 Turn asynchronous I/O for reads
184 (i.e., generation of
185 .Dv SIGIO
186 when data is available to be read)
187 off or on, according as the argument
188 .Va int Ns 's
189 value is or is not zero.
190 .It Dv FIONREAD
191 If any frames are queued to be read, store the size of the first one into the argument
192 .Va int ;
193 otherwise, store zero.
194 .It Dv TIOCSPGRP
195 Set the process group to receive
196 .Dv SIGIO
197 signals, when asynchronous I/O is enabled, to the argument
198 .Va int
199 value.
200 .It Dv TIOCGPGRP
201 Retrieve the process group value for
202 .Dv SIGIO
203 signals into the argument
204 .Va int
205 value.
206 .It Dv SIOCGIFADDR
207 Retrieve the Media Access Control
208 .Pq Dv MAC
209 address of the
210 .Dq remote
211 side.
212 This command is used by the VMware port and expected to be executed on
213 descriptor, associated with control device
214 (usually
215 .Pa /dev/vmnet Ns Sy N
216 or
217 .Pa /dev/tap Ns Sy N ) .
218 The
219 .Va buffer ,
220 which is passed as the argument, is expected to have enough space to store
221 the
222 .Dv MAC
223 address.
224 At the open time both
225 .Dq local
226 and
227 .Dq remote
228 .Dv MAC
229 addresses are the same, so this command could be used to retrieve the
230 .Dq local
231 .Dv MAC
232 address.
233 .It Dv SIOCSIFADDR
234 Set the Media Access Control
235 .Pq Dv MAC
236 address of the
237 .Dq remote
238 side.
239 This command is used by VMware port and expected to be executed on
240 a descriptor, associated with control device
241 (usually
242 .Pa /dev/vmnet Ns Sy N ) .
243 .El
244 .Pp
245 The control device also supports
246 .Xr select 2
247 for read; selecting for write is pointless, and always succeeds, since
248 writes are always non-blocking.
249 .Pp
250 On the last close of the data device, the interface is
251 brought down
252 (as if with
253 .Dq ifconfig tap Ns Sy N No down )
254 unless the device is a
255 .Em VMnet
256 device.
257 All queued frames are thrown away.
258 If the interface is up when the data
259 device is not open, output frames are thrown away rather than
260 letting them pile up.
261 .Pp
262 The
263 .Nm
264 device can also be used with the VMware port as a replacement
265 for the old
266 .Em VMnet
267 device driver.
268 The driver uses the minor number
269 to select between
270 .Nm
271 and
272 .Nm vmnet
273 devices.
274 .Em VMnet
275 minor numbers begin at
276 .Va 0x800000
277 +
278 .Va N ;
279 where
280 .Va N
281 is a
282 .Em VMnet
283 unit number.
284 In this case the control device is expected to be
285 .Pa /dev/vmnet Ns Sy N ,
286 and the network interface will be
287 .Sy vmnet Ns Ar N .
288 Additionally,
289 .Em VMnet
290 devices do not
291 .Xr ifconfig 8
292 themselves down when the
293 control device is closed.
294 Everything else is the same.
295 .Pp
296 In addition to the above mentioned
297 .Xr ioctl 2
298 calls, there is an additional one for the VMware port.
299 .Bl -tag -width VMIO_SIOCSETMACADDR
300 .It Dv VMIO_SIOCSIFFLAGS
301 VMware
302 .Dv SIOCSIFFLAGS .
303 .El
304 .Sh SEE ALSO
305 .Xr inet 4 ,
306 .Xr intro 4