#ifdef TUN_UNET
# include <sys/ioctl.h>
-# include <net/if.h>
+# include <linux/if.h>
# include <unet.h>
#endif
n = read(fd, buf_i, sizeof(buf_i));
if (n < 0) {
- a_warn("TUN", "%s", p_ifname(t->p), "read-error", "?ERRNO", A_END);
+ a_warn("TUN", "%s", p_ifname(t->p), "unet",
+ "read-error", "?ERRNO", A_END);
return;
}
IF_TRACING(T_TUNNEL, {
static void t_init(void) { return; }
-/* --- @t_open@ --- *
- *
- * Arguments: @char **ifn@ = where to put the interface name
- *
- * Returns: A file descriptor, or @-1@ on failure.
- *
- * Use: Opens a tunnel device. This will run with root privileges
- * even if the rest of the server has dropped them.
- */
-
-static int t_open(char **ifn)
-{
- int fd;
- int f;
- struct unet_info uni;
-
- if ((fd = open("/dev/unet", O_RDWR)) < 0) {
- a_warn("TUN", "-", "unet", "open-error", "/dev/unet", "?ERRNO", A_END);
- goto fail_0;
- }
- if ((f = ioctl(fd, UNIOCGIFFLAGS)) < 0 ||
- ioctl(fd, UNIOCSIFFLAGS, f | IFF_POINTOPOINT)) {
- a_warn("TUN", "-", "unet", "config-error", "?ERRNO", A_END);
- goto fail_1;
- }
- if (ioctl(t->f.fd, UNIOCGINFO, &uni)) {
- a_warn("TUN", "-", "unet", "getinfo-error", "?ERRNO", A_END);
- goto fail_1;
- }
- *ifn = xstrdup(uni.uni_ifname);
- return (fd);
-
-fail_1:
- close(fd);
-fail_0:
- return (-1);
-}
-
/* --- @t_create@ --- *
*
* Arguments: @peer *p@ = pointer to peer block
trace(T_TUNNEL, "tun-unet: inject decrypted packet");
trace_block(T_PACKET, "tun-unet: packet contents", BBASE(b), BLEN(b));
})
- write(t->f.fd, BBASE(b), BLEN(b));
+ DISCARD(write(t->f.fd, BBASE(b), BLEN(b)));
}
/* --- @t_destroy@ --- *
const tunnel_ops tun_unet = {
"unet",
+ TUNF_PRIVOPEN,
t_init,
- t_open,
t_create,
0,
t_inject,