Use TUNIFHEAD by default on FreeBSD to make sure IPv6 works.
[tinc] / src / bsd / device.c
index 5e7a198..ee1c988 100644 (file)
@@ -1,7 +1,7 @@
 /*
     device.c -- Interaction BSD tun/tap device
-    Copyright (C) 2001-2004 Ivo Timmermans <ivo@tinc-vpn.org>,
-                  2001-2004 Guus Sliepen <guus@tinc-vpn.org>
+    Copyright (C) 2001-2005 Ivo Timmermans,
+                  2001-2007 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
@@ -42,7 +42,7 @@ char *iface;
 char *device_info;
 static int device_total_in = 0;
 static int device_total_out = 0;
-#ifdef HAVE_OPENBSD
+#if defined(HAVE_OPENBSD) || defined(HAVE_FREEBSD)
 static device_type_t device_type = DEVICE_TYPE_TUNIFHEAD;
 #else
 static device_type_t device_type = DEVICE_TYPE_TUN;
@@ -78,7 +78,7 @@ bool setup_device(void) {
                        return false;
                }
        } else {
-               if(strstr(device, "tap"))
+               if(strstr(device, "tap") || routing_mode != RMODE_ROUTER)
                        device_type = DEVICE_TYPE_TAP;
        }
 
@@ -245,7 +245,7 @@ bool write_packet(vpn_packet_t *packet)
 
                case DEVICE_TYPE_TUNIFHEAD: {
                        u_int32_t type;
-                       struct iovec vector[2] = {{&type, sizeof(type)}, {packet->data + 14, MTU - 14}};
+                       struct iovec vector[2] = {{&type, sizeof(type)}, {packet->data + 14, packet->len - 14}};
                        int af;
                        
                        af = (packet->data[12] << 8) + packet->data[13];