X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=tun.c;h=80606232d76de4eddff92b15e1c4c7b05f3cdfbf;hp=f7c0561179480d43f5d8aae40932afd76736b24a;hb=dee2e14c6ebac12102256639fc9e53d21eb871b2;hpb=3b83c93292fbf6c4e859ce513bdf54ad90733f96 diff --git a/tun.c b/tun.c index f7c0561..8060623 100644 --- a/tun.c +++ b/tun.c @@ -149,7 +149,7 @@ static bool_t tun_set_route(void *sst, struct netlink_client *routes) struct tun *st=sst; string_t network, mask, secnetaddr; struct subnet_list *nets; - uint32_t i; + int32_t i; int fd=-1; if (routes->up == routes->kup) return False; @@ -190,7 +190,8 @@ static bool_t tun_set_route(void *sst, struct netlink_client *routes) break; case TUN_CONFIG_IOCTL: { -#ifdef HAVE_NET_ROUTE_H + /* darwin rtentry has a different format, use /sbin/route instead */ +#if HAVE_NET_ROUTE_H && ! __APPLE__ struct rtentry rt; struct sockaddr_in *sa; int action; @@ -233,7 +234,7 @@ static void tun_phase_hook(void *sst, uint32_t newphase) { struct tun *st=sst; string_t hostaddr,secnetaddr; - uint8_t mtu[6]; + char mtu[6]; struct netlink_client *r; if (st->tun_flavour==TUN_FLAVOUR_BSD) { @@ -353,7 +354,7 @@ static void tun_phase_hook(void *sst, uint32_t newphase) hostaddr,secnetaddr,"mtu",mtu,"up",(char *)0); break; case TUN_CONFIG_IOCTL: -#ifdef HAVE_NET_IF_H +#if HAVE_NET_IF_H && ! __APPLE__ { int fd; struct ifreq ifr; @@ -486,7 +487,8 @@ static list_t *tun_create(closure_t *self, struct cloc loc, dict_t *context, } } else if (strcmp(u.sysname,"SunOS")==0) { st->tun_flavour=TUN_FLAVOUR_STREAMS; - } else if (strcmp(u.sysname,"FreeBSD")==0) { + } else if (strcmp(u.sysname,"FreeBSD")==0 + || strcmp(u.sysname,"Darwin")==0) { st->tun_flavour=TUN_FLAVOUR_BSD; } } @@ -501,9 +503,13 @@ static list_t *tun_create(closure_t *self, struct cloc loc, dict_t *context, st->ifconfig_type=TUN_CONFIG_IOCTL; break; case TUN_FLAVOUR_BSD: +#if __linux__ /* XXX on Linux we still want TUN_CONFIG_IOCTL. Perhaps we can use this on BSD too. */ st->ifconfig_type=TUN_CONFIG_IOCTL; +#else + st->ifconfig_type=TUN_CONFIG_BSD; +#endif break; case TUN_FLAVOUR_STREAMS: st->ifconfig_type=TUN_CONFIG_BSD; @@ -597,7 +603,6 @@ static list_t *tun_bsd_apply(closure_t *self, struct cloc loc, dict_t *context, return tun_create(self,loc,context,args,TUN_FLAVOUR_BSD); } -init_module tun_module; void tun_module(dict_t *dict) { add_closure(dict,"tun",tun_apply);