projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't leave dead outgoing_t's in the outgoing_list.
[tinc]
/
src
/
linux
/
device.c
diff --git
a/src/linux/device.c
b/src/linux/device.c
index
3b384d4
..
a06e6da
100644
(file)
--- a/
src/linux/device.c
+++ b/
src/linux/device.c
@@
-1,7
+1,7
@@
/*
device.c -- Interaction with Linux ethertap and tun/tap device
Copyright (C) 2001-2005 Ivo Timmermans,
/*
device.c -- Interaction with Linux ethertap and tun/tap device
Copyright (C) 2001-2005 Ivo Timmermans,
- 2001-201
3
Guus Sliepen <guus@tinc-vpn.org>
+ 2001-201
4
Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-101,12
+101,15
@@
static bool setup_device(void) {
strncpy(ifrname, ifr.ifr_name, IFNAMSIZ);
free(iface);
iface = xstrdup(ifrname);
strncpy(ifrname, ifr.ifr_name, IFNAMSIZ);
free(iface);
iface = xstrdup(ifrname);
+ } else {
+ logger(DEBUG_ALWAYS, LOG_ERR, "Could not create a tun/tap interface from %s: %s", device, strerror(errno));
+ return false;
}
logger(DEBUG_ALWAYS, LOG_INFO, "%s is a %s", device, device_info);
if(ifr.ifr_flags & IFF_TAP) {
}
logger(DEBUG_ALWAYS, LOG_INFO, "%s is a %s", device, device_info);
if(ifr.ifr_flags & IFF_TAP) {
- struct ifreq ifr_mac;
+ struct ifreq ifr_mac
= {}
;
if(!ioctl(device_fd, SIOCGIFHWADDR, &ifr_mac))
memcpy(mymac.x, ifr_mac.ifr_hwaddr.sa_data, ETH_ALEN);
else
if(!ioctl(device_fd, SIOCGIFHWADDR, &ifr_mac))
memcpy(mymac.x, ifr_mac.ifr_hwaddr.sa_data, ETH_ALEN);
else
@@
-131,7
+134,7
@@
static bool read_packet(vpn_packet_t *packet) {
switch(device_type) {
case DEVICE_TYPE_TUN:
switch(device_type) {
case DEVICE_TYPE_TUN:
- inlen = read(device_fd,
packet->data
+ 10, MTU - 10);
+ inlen = read(device_fd,
DATA(packet)
+ 10, MTU - 10);
if(inlen <= 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s",
if(inlen <= 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s",
@@
-139,11
+142,11
@@
static bool read_packet(vpn_packet_t *packet) {
return false;
}
return false;
}
- memset(
packet->data
, 0, 12);
+ memset(
DATA(packet)
, 0, 12);
packet->len = inlen + 10;
break;
case DEVICE_TYPE_TAP:
packet->len = inlen + 10;
break;
case DEVICE_TYPE_TAP:
- inlen = read(device_fd,
packet->data
, MTU);
+ inlen = read(device_fd,
DATA(packet)
, MTU);
if(inlen <= 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s",
if(inlen <= 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s",
@@
-169,15
+172,15
@@
static bool write_packet(vpn_packet_t *packet) {
switch(device_type) {
case DEVICE_TYPE_TUN:
switch(device_type) {
case DEVICE_TYPE_TUN:
-
packet->data[10] = packet->data
[11] = 0;
- if(write(device_fd,
packet->data
+ 10, packet->len - 10) < 0) {
+
DATA(packet)[10] = DATA(packet)
[11] = 0;
+ if(write(device_fd,
DATA(packet)
+ 10, packet->len - 10) < 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Can't write to %s %s: %s", device_info, device,
strerror(errno));
return false;
}
break;
case DEVICE_TYPE_TAP:
logger(DEBUG_ALWAYS, LOG_ERR, "Can't write to %s %s: %s", device_info, device,
strerror(errno));
return false;
}
break;
case DEVICE_TYPE_TAP:
- if(write(device_fd,
packet->data
, packet->len) < 0) {
+ if(write(device_fd,
DATA(packet)
, packet->len) < 0) {
logger(DEBUG_ALWAYS, LOG_ERR, "Can't write to %s %s: %s", device_info, device,
strerror(errno));
return false;
logger(DEBUG_ALWAYS, LOG_ERR, "Can't write to %s %s: %s", device_info, device,
strerror(errno));
return false;