patch-2.4.0-test7 linux/Documentation/networking/tuntap.txt

Next file: linux/Documentation/networking/vortex.txt
Previous file: linux/Documentation/networking/ip-sysctl.txt
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test6/linux/Documentation/networking/tuntap.txt linux/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. 
+
+

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)