diff options
Diffstat (limited to 'Documentation/networking/tuntap.txt')
-rw-r--r-- | Documentation/networking/tuntap.txt | 150 |
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. + + |