X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fbsd%2Fdevice.c;h=803ca5cab4ac9a51a79e765c30a53994f6a6f0bf;hp=045fc188241b03f07864453cba54f760bb758cf8;hb=df3220a1549f992cbf4a9b6e67c1e67b69896c7d;hpb=82b29e9a3b1dc6b2104ab92ed78bf431a4e55649 diff --git a/src/bsd/device.c b/src/bsd/device.c index 045fc188..803ca5ca 100644 --- a/src/bsd/device.c +++ b/src/bsd/device.c @@ -1,7 +1,7 @@ /* device.c -- Interaction BSD tun/tap device - Copyright (C) 2001-2004 Ivo Timmermans , - 2001-2004 Guus Sliepen + Copyright (C) 2001-2005 Ivo Timmermans , + 2001-2005 Guus Sliepen 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 @@ -49,10 +49,6 @@ static device_type_t device_type = DEVICE_TYPE_TUN; #endif bool setup_device(void) { -#ifdef TUNSIFHEAD - const int zero = 0; - const int one = 1; -#endif char *type; cp(); @@ -91,20 +87,40 @@ bool setup_device(void) { device_type = DEVICE_TYPE_TUN; case DEVICE_TYPE_TUN: #ifdef TUNSIFHEAD + { + const int zero = 0; if(ioctl(device_fd, TUNSIFHEAD, &zero, sizeof zero) == -1) { logger(LOG_ERR, _("System call `%s' failed: %s"), "ioctl", strerror(errno)); return false; } + } +#endif +#if defined(TUNSIFMODE) && defined(IFF_BROADCAST) && defined(IFF_MULTICAST) + { + const int mode = IFF_BROADCAST | IFF_MULTICAST; + ioctl(device_fd, TUNSIFMODE, &mode, sizeof mode); + } #endif + device_info = _("Generic BSD tun device"); break; case DEVICE_TYPE_TUNIFHEAD: #ifdef TUNSIFHEAD + { + const int one = 1; if(ioctl(device_fd, TUNSIFHEAD, &one, sizeof one) == -1) { logger(LOG_ERR, _("System call `%s' failed: %s"), "ioctl", strerror(errno)); return false; } + } #endif +#if defined(TUNSIFMODE) && defined(IFF_BROADCAST) && defined(IFF_MULTICAST) + { + const int mode = IFF_BROADCAST | IFF_MULTICAST; + ioctl(device_fd, TUNSIFMODE, &mode, sizeof mode); + } +#endif + device_info = _("Generic BSD tun device"); break; case DEVICE_TYPE_TAP: