#include #include #include #include #include #include #include #include int tap_alloc(char *dev) { struct ifreq ifr; int fd, err; if((fd = open("/dev/net/tun", O_RDWR)) < 0) { return -1; } memset(&ifr, 0, sizeof(ifr)); ifr.ifr_flags = IFF_TAP | IFF_MULTI_QUEUE; if(*dev) { strncpy(ifr.ifr_name, dev, IFNAMSIZ); } if((err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0) { close(fd); return err; } return fd; } int main(int argc, char* argv[]) { int tap_fd; char tap_name[IFNAMSIZ]; char buffer[4096]; strcpy(tap_name, "taptest"); tap_fd = tap_alloc(tap_name); if(tap_fd < 0) { perror("Error while allocating the tap interface"); exit(1); } while(1) { int nread = read(tap_fd,buffer,sizeof(buffer)); if (nread < 0) { perror("Error while reading from tap"); close(tap_fd); exit(1); } printf("Read %d bytes from device %s\n", nread, tap_name); } }