X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fopenbsd%2Fdevice.c;h=9a39ede1a2e78d46b8a5f5ad2a0083611626211f;hp=1fccd14f18fc8db8dc7876008e68909348b35dd5;hb=8379c14b7f7a9b1400dd3776fc21dc9ccddd991d;hpb=f0aa9641e82fb6e09c1e485366d14dddaa7f7c36 diff --git a/src/openbsd/device.c b/src/openbsd/device.c index 1fccd14f..9a39ede1 100644 --- a/src/openbsd/device.c +++ b/src/openbsd/device.c @@ -17,12 +17,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: device.c,v 1.1.2.3 2002/02/10 21:57:54 guus Exp $ + $Id: device.c,v 1.1.2.6 2002/03/24 16:50:58 guus Exp $ */ #include "config.h" #include +#include #include #include #include @@ -66,11 +67,11 @@ int setup_device(void) device = DEFAULT_DEVICE; if(!get_config_string(lookup_config(config_tree, "Interface"), &interface)) - interface = netname; + interface = rindex(device, '/')?rindex(device, '/')+1:device; cp if((device_fd = open(device, O_RDWR | O_NONBLOCK)) < 0) { - syslog(LOG_ERR, _("Could not open %s: %m"), device); + syslog(LOG_ERR, _("Could not open %s: %s"), device, strerror(errno)); return -1; } cp @@ -107,14 +108,14 @@ cp if((lenin = readv(device_fd, vector, 2)) <= 0) { - syslog(LOG_ERR, _("Error while reading from %s %s: %m"), device_info, device); + syslog(LOG_ERR, _("Error while reading from %s %s: %s"), device_info, device, strerror(errno)); return -1; } memcpy(packet->data, mymac.net.mac.address.x, 6); memcpy(packet->data + 6, mymac.net.mac.address.x, 6); - packet->data[12] = 0x08; - packet->data[13] = 0x00; + packet->data[12] = (ntohl(type) >> 8) & 0xFF; + packet->data[13] = ntohl(type) & 0xFF; packet->len = lenin + 10; @@ -131,13 +132,15 @@ cp int write_packet(vpn_packet_t *packet) { - u_int32_t type = htonl(AF_INET); + u_int32_t type; struct iovec vector[2]; cp if(debug_lvl >= DEBUG_TRAFFIC) syslog(LOG_DEBUG, _("Writing packet of %d bytes to %s"), packet->len, device_info); + type = htonl((packet->data[12] << 8) + packet->data[13]); + vector[0].iov_base = &type; vector[0].iov_len = sizeof(type); vector[1].iov_base = packet->data + 14; @@ -145,7 +148,7 @@ cp if(writev(device_fd, vector, 2) < 0) { - syslog(LOG_ERR, _("Can't write to %s %s: %m"), device_info, device); + syslog(LOG_ERR, _("Can't write to %s %s: %s"), device_info, device, strerror(errno)); return -1; }