diff --git a/src/tuntap.c b/src/tuntap.c new file mode 100644 index 0000000..8109067 --- /dev/null +++ b/src/tuntap.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +int tun_alloc(char *dev) + { + struct ifreq ifr; + int fd, err; + + fd = open("/dev/net/tun", O_RDWR); + if (fd < 0) + return fd; + // 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|IFF_NO_PI; + if( *dev ) + strncpy(ifr.ifr_name, dev, IFNAMSIZ); + + if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){ + close(fd); + return err; + } +#if 0 + strcpy(dev, ifr.ifr_name); +#endif + return fd; + }