X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/eb5f3fea8a65306e424a353951208b11bd3aac22..1171524232347e4c8fbd47409577c5e988ebc6d6:/server/tun-linux.c diff --git a/server/tun-linux.c b/server/tun-linux.c index 11c7f37a..33451746 100644 --- a/server/tun-linux.c +++ b/server/tun-linux.c @@ -65,7 +65,8 @@ static void t_read(int fd, unsigned mode, void *v) 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), "linux", + "read-error", "?ERRNO", A_END); return; } IF_TRACING(T_TUNNEL, { @@ -88,40 +89,6 @@ static void t_read(int fd, unsigned mode, void *v) 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; - struct ifreq iff; - - if ((fd = open("/dev/net/tun", O_RDWR)) < 0) { - a_warn("TUN", "-", "linux", - "open-error", "/dev/net/tun", "?ERRNO", - A_END); - return (-1); - } - memset(&iff, 0, sizeof(iff)); - iff.ifr_name[0] = 0; - iff.ifr_flags = IFF_TUN | IFF_NO_PI; - if (ioctl(fd, TUNSETIFF, &iff) < 0) { - a_warn("TUN", "-", "linux", "config-error", "?ERRNO", A_END); - close(fd); - return (-1); - } - iff.ifr_name[IFNAMSIZ - 1] = 0; - *ifn = xstrdup(iff.ifr_name); - return (fd); -} - /* --- @t_create@ --- * * * Arguments: @peer *p@ = pointer to peer block @@ -158,11 +125,13 @@ static tunnel *t_create(peer *p, int fd, char **ifn) static void t_inject(tunnel *t, buf *b) { + int hunoz; + IF_TRACING(T_TUNNEL, { trace(T_TUNNEL, "tun-linux: inject decrypted packet"); trace_block(T_PACKET, "tunnel: packet contents", BBASE(b), BLEN(b)); }) - write(t->f.fd, BBASE(b), BLEN(b)); + hunoz = write(t->f.fd, BBASE(b), BLEN(b)); } /* --- @t_destroy@ --- * @@ -179,8 +148,8 @@ static void t_destroy(tunnel *t) const tunnel_ops tun_linux = { "linux", + TUNF_PRIVOPEN, t_init, - t_open, t_create, 0, t_inject,