Often when tun/tap is used any errors during setup will be confuse tinc
and it will then assume it is an Ethertap device. Try to avoid this by
checking errno after a failed TUNSETIFF; if it's EPERM or EBUSY then
we can be sure it was not an Ethertap device, and we should report an
error instead.
Closes #157 on GitHub.
ifrname[IFNAMSIZ - 1] = 0;
free(iface);
iface = xstrdup(ifrname);
+ } else if(errno == EPERM || errno == EBUSY) {
+ logger(LOG_ERR, "Error while trying to configure %s: %s", device, strerror(errno));
+ return false;
} else if(!ioctl(device_fd, (('T' << 8) | 202), &ifr)) {
logger(LOG_WARNING, "Old ioctl() request was needed for %s", device);
strncpy(ifrname, ifr.ifr_name, IFNAMSIZ);