#include <linux/if_tun.h>
#endif
-/* XXX where do we find if_tun on other platforms? */
+/* Where do we find if_tun on other platforms? */
/* Connection to the kernel through the universal TUN/TAP driver */
struct tun *st=sst;
int l;
+ if (nfds==0) return;
if (fds[0].revents&POLLERR) {
printf("tun_afterpoll: hup!\n");
}
}
if (l>0) {
st->buff->size=l;
- st->netlink_to_tunnel(&st->nl,NULL,st->buff);
+ st->netlink_to_tunnel(&st->nl,st->buff);
BUF_ASSERT_FREE(st->buff);
}
}
}
-static void tun_deliver_to_kernel(void *sst, void *cid,
- struct buffer_if *buf)
+static void tun_deliver_to_kernel(void *sst, struct buffer_if *buf)
{
struct tun *st=sst;
BUF_ASSERT_USED(buf);
-
- /* No error checking, because we'd just throw the packet away anyway */
+ /* No error checking, because we'd just throw the packet away
+ anyway if it didn't work. */
write(st->fd,buf->start,buf->size);
BUF_FREE(buf);
}
if (!st->ifconfig_path) st->ifconfig_path="ifconfig";
if (!st->route_path) st->route_path="route";
st->buff=find_cl_if(dict,"buffer",CL_BUFFER,True,"tun-netlink",loc);
- st->local_address=string_to_ipaddr(
+ st->local_address=string_item_to_ipaddr(
dict_find_item(dict,"local-address", True, "netlink", loc),"netlink");
add_hook(PHASE_GETRESOURCES,tun_phase_hook,st);
st=safe_malloc(sizeof(*st),"tun_old_apply");
- Message(M_WARNING,"the tun-old code has never been tested. Please report "
- "success or failure to steve@greenend.org.uk\n");
-
/* First parameter must be a dict */
item=list_elem(args,0);
if (!item || item->type!=t_dict)
st->netlink_to_tunnel=
netlink_init(&st->nl,st,loc,dict,
- "netlink-tun",NULL,tun_deliver_to_kernel);
+ "netlink-tun",tun_set_route,tun_deliver_to_kernel);
st->tun_old=True;
st->device_path=dict_read_string(dict,"device",False,"tun-netlink",loc);
if (!st->ifconfig_path) st->ifconfig_path="ifconfig";
if (!st->route_path) st->route_path="route";
st->buff=find_cl_if(dict,"buffer",CL_BUFFER,True,"tun-netlink",loc);
- st->local_address=string_to_ipaddr(
+ st->local_address=string_item_to_ipaddr(
dict_find_item(dict,"local-address", True, "netlink", loc),"netlink");
/* Old TUN interface: the network interface name depends on which