ioctl (TUNSETIFF) : device or resource busy

user2044000 picture user2044000 · May 4, 2016 · Viewed 9.4k times · Source

I am unable to set TUN interface. Everywhere i searched and it says the device should be rooted. I am setting up proxyserver on my ubuntu 14.04 system

static int get_interface(char *name) {
int interface = open("/dev/net/tun", O_RDWR | O_NONBLOCK);
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TUN | IFF_NO_PI;   
strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));

if (ioctl(interface, TUNSETIFF, (void *)&ifr) < 0) {
    perror("Cannot get TUN interface");
    exit(1);
}

return interface;

}

Answer

hackmaxed picture hackmaxed · Nov 20, 2018

Check your device name (i.e. ifr.ifr_name). Another process maybe using the same device. For example, you may be trying to use tun0 and another process has it open already.