summaryrefslogtreecommitdiffstats
path: root/Documentation/networking/tuntap.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/networking/tuntap.txt')
-rw-r--r--Documentation/networking/tuntap.txt150
1 files changed, 150 insertions, 0 deletions
diff --git a/Documentation/networking/tuntap.txt b/Documentation/networking/tuntap.txt
new file mode 100644
index 000000000..cbeb54cb8
--- /dev/null
+++ b/Documentation/networking/tuntap.txt
@@ -0,0 +1,150 @@
+Universal TUN/TAP device driver.
+Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
+
+ Linux, Solaris drivers
+ Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
+
+ FreeBSD TAP driver
+ Copyright (c) 1999-2000 Maksim Yevmenkin <m_evmenkin@yahoo.com>
+
+1. Description
+ TUN/TAP provides packet reception and transmission for user space programs.
+ It can be viewed as a simple Point-to-Point or Ethernet device, which
+ instead of receiving packets from a physical media, receives them from
+ user space program and instead of sending packets via physical media
+ writes them to the user space program.
+
+ When a program opens /dev/net/tun, driver creates and registers corresponding
+ net device tunX or tapX. After a program closed above devices, driver will
+ automatically delete tunXX or tapXX device and all routes corresponding to it.
+
+ This package(http://vtun.sourceforge.net/tun) contains two simple example
+ programs how to use tun and tap devices. Both programs works like
+ bridge between two network interfaces.
+ br_select.c - bridge based on select system call.
+ br_sigio.c - bridge based on async io and SIGIO signal.
+ However the best example is VTun http://vtun.sourceforge.net :))
+
+2. Installation
+ Run './configure' to configure the driver.
+
+ Run 'make install' to compile and install driver module and to create
+ /dev/net/tun device node.
+
+3. Loading driver module
+ Linux
+ To load TUN/TAP driver module run:
+ modprobe tun
+ To configure automatic loading of the 'tun' module you have to add:
+ alias char-major-195 tun
+ to the /etc/conf.modules, and run:
+ modprobe -a
+ TUN/TAP driver will be automatically loaded when application access
+ /dev/net/tun.
+ If "Kernel module loader" - module auto-loading support is not enabled
+ in your kernel then you can add
+ modprobe tun
+ to one of the startup rc files.
+
+4. Program interface
+ 4.1 Network device allocation:
+
+ int tun_alloc(char *dev)
+ {
+ struct ifreq ifr;
+ int fd, err;
+
+ if( (fd = open("/dev/net/tun", O_RDWR)) < 0 )
+ return tun_alloc_old(dev);
+
+ memset(&ifr, 0, sizeof(ifr));
+
+ /* Flags: IFF_TUN - TUN device (no Ethernet headers)
+ * IFF_TAP - TAP device
+ *
+ * IFF_NO_PI - Do not provide packet information
+ */
+ ifr.ifr_flags = IFF_TUN;
+ if( *dev )
+ strncpy(ifr.ifr_name, dev, IFNAMSIZ);
+
+ if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){
+ close(fd);
+ return err;
+ }
+ strcpy(dev, ifr.ifr_name);
+ return fd;
+ }
+
+ 4.2 Frame format:
+ If flag IFF_NO_PI is not set each frame format is:
+ Flags [2 bytes]
+ Proto [2 bytes]
+ Raw protocol(IP, IPv6, etc) frame.
+
+Universal TUN/TAP device driver Frequently Asked Question.
+
+1. What is the TUN ?
+The TUN is Virtual Point-to-Point network device.
+TUN driver was designed as low level kernel support for
+IP tunneling. It provides to userland application
+two interfaces:
+ - /dev/tunX - character device;
+ - tunX - virtual Point-to-Point interface.
+
+Userland application can write IP frame to /dev/tunX
+and kernel will receive this frame from tunX interface.
+In the same time every frame that kernel writes to tunX
+interface can be read by userland application from /dev/tunX
+device.
+
+2. What is the TAP ?
+The TAP is a Virtual Ethernet network device.
+TAP driver was designed as low level kernel support for
+Ethernet tunneling. It provides to userland application
+two interfaces:
+ - /dev/tapX - character device;
+ - tapX - virtual Ethernet interface.
+
+Userland application can write Ethernet frame to /dev/tapX
+and kernel will receive this frame from tapX interface.
+In the same time every frame that kernel writes to tapX
+interface can be read by userland application from /dev/tapX
+device.
+
+3. What platforms are supported by TUN/TAP driver ?
+Currently driver has been written for 3 Unices:
+ Linux kernels 2.2.x, 2.4.x
+ FreeBSD 3.x, 4.x, 5.x
+ Solaris 2.6, 7.0, 8.0
+
+4. What is TUN/TAP driver used for?
+As mentioned above, main purpose of TUN/TAP driver is tunneling.
+It used by VTun (http://vtun.netpedia.net).
+
+5. How does Virtual network device actually work ?
+Virtual network device can be viewed as a simple Point-to-Point or
+Ethernet device, which instead of receiving packets from a physical
+media, receives them from user space program and instead of sending
+packets via physical media sends them to the user space program.
+
+Let's say that you configured IPX on the tap0, then whenever
+kernel sends any IPX packet to tap0, it is passed to the application
+(VTun for example). Application encrypts, compresses and sends it to
+the other side over TCP or UDP. Application on other side decompress
+and decrypts them and write packet to the TAP device, kernel handles
+the packet like it came from real physical device.
+
+6. What is the difference between TUN driver and TAP driver?
+TUN works with IP frames. TAP works with Ethernet frames.
+
+7. What is the difference between BPF and TUN/TAP driver?
+BFP is a advanced packet filter. It can be attached to existing
+network interface. It does not provide virtual network interface.
+TUN/TAP driver does provide virtual network interface and it is possible
+to attach BPF to this interface.
+
+8. Does TAP driver support kernel Ethernet bridging?
+Yes. Linux and FreeBSD drivers support Ethernet bridging.
+
+