rendered paste bodyint _tunnel_create_device(tunnel * tun) {
struct ifreq ifr;
struct ifreq ifrq;
int fd;
int s;
struct sockaddr_in *sin;
if((fd = open("/dev/net/tun", O_RDWR)) < 0) {
return -1;
}
memset(&ifr, 0, sizeof(ifr));
//ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
ifr.ifr_flags = IFF_TUN;
if(tun->dev[0] != 0) {
strncpy(ifr.ifr_name, tun->dev, IFNAMSIZ);
}
if (ioctl(fd, TUNSETIFF, (void *) &ifr) < 0) {
if (errno == EBADFD) {
/* Try old ioctl */
//if (ioctl(fd, OTUNSETIFF, (void *) &ifr) < 0) {
close(fd);
return -1;
//}
} else {
close(fd);
return -1;
}
}
tun->local_fd = fd;
strcpy(tun->dev, ifr.ifr_name);
log_message(LOG_LEVEL_DEBUG, "Device %s opened", tun->dev);
tun->local_fd = fd;
return 0;
}