From b69d5cc8f54d159ee4df3e3bd36b185fa183da40 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 19 Aug 2009 15:55:14 +0000 Subject: Fixed ifconfig command for "topology subnet" on FreeBSD (Stefan Bethke). git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@4837 e7ae566f-a301-0410-adde-c780ea21d3b5 --- tun.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tun.c b/tun.c index 6ad1cb0..29278b8 100644 --- a/tun.c +++ b/tun.c @@ -863,11 +863,10 @@ do_ifconfig (struct tuntap *tt, else { if (tt->topology == TOP_SUBNET) argv_printf (&argv, - "%s %s %s %s netmask %s mtu %d up", + "%s %s %s netmask %s mtu %d up", IFCONFIG_PATH, actual, ifconfig_local, - ifconfig_local, ifconfig_remote_netmask, tun_mtu ); @@ -1745,14 +1744,19 @@ open_tun (const char *dev, const char *dev_type, const char *dev_node, bool ipv6 { open_tun_generic (dev, dev_type, dev_node, ipv6, true, true, tt); - if (tt->fd >= 0) + if (tt->fd >= 0 && tt->type == DEV_TYPE_TUN) { int i = 0; - /* Disable extended modes */ - ioctl (tt->fd, TUNSLMODE, &i); + i = tt->topology == TOP_SUBNET ? IFF_BROADCAST : IFF_POINTOPOINT; + i |= IFF_MULTICAST; + if (ioctl (tt->fd, TUNSIFMODE, &i) < 0) { + msg (M_WARN | M_ERRNO, "ioctl(TUNSIFMODE): %s", strerror(errno)); + } i = 1; - ioctl (tt->fd, TUNSIFHEAD, &i); + if (ioctl (tt->fd, TUNSIFHEAD, &i) < 0) { + msg (M_WARN | M_ERRNO, "ioctl(TUNSIFHEAD): %s", strerror(errno)); + } } } -- cgit