X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/24952f96a3f853e9c37e2c501dd04ae6ee2a552e..72917fe7c663aced54f7e1185b7b72ba59aea73c:/server/tun-linux.c diff --git a/server/tun-linux.c b/server/tun-linux.c index 3cfa5d72..42503548 100644 --- a/server/tun-linux.c +++ b/server/tun-linux.c @@ -46,7 +46,6 @@ struct tunnel { const tunnel_ops *ops; /* Pointer to operations */ sel_file f; /* Selector for TUN/TAP device */ struct peer *p; /* Pointer to my peer */ - char ifn[IFNAMSIZ]; /* Interface name buffer */ }; /* --- @t_read@ --- * @@ -68,7 +67,7 @@ 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", t->ifn, "read-error", "?ERRNO", A_END); + a_warn("TUN", "%s", p_ifname(t->p), "read-error", "?ERRNO", A_END); return; } IF_TRACING(T_TUNNEL, { @@ -94,13 +93,14 @@ static void t_init(void) { return; } /* --- @t_create@ --- * * * Arguments: @peer *p@ = pointer to peer block + * @char **ifn@ = where to put the interface name * * Returns: A tunnel block if it worked, or null on failure. * * Use: Initializes a new tunnel. */ -static tunnel *t_create(peer *p) +static tunnel *t_create(peer *p, char **ifn) { int fd; int f; @@ -128,21 +128,12 @@ static tunnel *t_create(peer *p) sel_initfile(&sel, &t->f, fd, SEL_READ, t_read, t); sel_addfile(&t->f); iff.ifr_name[IFNAMSIZ - 1] = 0; - strcpy(t->ifn, iff.ifr_name); + *ifn = xstrdup(iff.ifr_name); T( trace(T_TUNNEL, "tun-linux: attached interface %s to peer `%s'", - t->ifn, p_name(p)); ) + *ifn, p_name(p)); ) return (t); } -/* --- @t_ifname@ --- * - * - * Arguments: @tunnel *t@ = pointer to tunnel block - * - * Returns: A pointer to the tunnel's interface name. - */ - -static const char *t_ifname(tunnel *t) { return (t->ifn); } - /* --- @t_inject@ --- * * * Arguments: @tunnel *t@ = pointer to tunnel block @@ -182,7 +173,7 @@ const tunnel_ops tun_linux = { "linux", t_init, t_create, - t_ifname, + 0, t_inject, t_destroy };