X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Flinux%2Fdevice.c;h=18f1b6e574686219b432566656bc1188d2a8b0c1;hb=d917c8cb6b69475d568ccbe82389b9f2b3eb5e80;hp=ede681987c18b3b333ed3ae6ac7f9e9272fbfff8;hpb=8ac096b5bf9da1b3961a3ac4a03d083629222a63;p=tinc diff --git a/src/linux/device.c b/src/linux/device.c index ede68198..18f1b6e5 100644 --- a/src/linux/device.c +++ b/src/linux/device.c @@ -55,12 +55,9 @@ static bool setup_device(void) { device = xstrdup(DEFAULT_DEVICE); if(!get_config_string(lookup_config(config_tree, "Interface"), &iface)) -#ifdef HAVE_LINUX_IF_TUN_H - if (netname != NULL) + if(netname) iface = xstrdup(netname); -#else - iface = xstrdup(strrchr(device, '/') ? strrchr(device, '/') + 1 : device); -#endif + device_fd = open(device, O_RDWR | O_NONBLOCK); if(device_fd < 0) { @@ -104,12 +101,7 @@ static bool setup_device(void) { if(!ioctl(device_fd, TUNSETIFF, &ifr)) { strncpy(ifrname, ifr.ifr_name, IFNAMSIZ); - if(iface) free(iface); - iface = xstrdup(ifrname); - } else if(!ioctl(device_fd, (('T' << 8) | 202), &ifr)) { - logger(DEBUG_ALWAYS, LOG_WARNING, "Old ioctl() request was needed for %s", device); - strncpy(ifrname, ifr.ifr_name, IFNAMSIZ); - if(iface) free(iface); + free(iface); iface = xstrdup(ifrname); } @@ -128,7 +120,7 @@ static void close_device(void) { static bool read_packet(vpn_packet_t *packet) { int inlen; - + switch(device_type) { case DEVICE_TYPE_TUN: inlen = read(device_fd, packet->data + 10, MTU - 10); @@ -139,6 +131,7 @@ static bool read_packet(vpn_packet_t *packet) { return false; } + memset(packet->data, 0, 12); packet->len = inlen + 10; break; case DEVICE_TYPE_TAP: