X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/e6b06b6b61b4b877937d4a56ba704d3f18154dc2..786989941b7b4504f0234c4a318f929802e981ad:/tun-unet.c diff --git a/tun-unet.c b/tun-unet.c deleted file mode 100644 index c2b6e771..00000000 --- a/tun-unet.c +++ /dev/null @@ -1,199 +0,0 @@ -/* -*-c-*- - * - * $Id$ - * - * Tunnel interface based on Linux Usernet - * - * (c) 2001 Straylight/Edgeware - */ - -/*----- Licensing notice --------------------------------------------------* - * - * This file is part of Trivial IP Encryption (TrIPE). - * - * TrIPE is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * TrIPE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with TrIPE; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/*----- Header files ------------------------------------------------------*/ - -#define TUN_INTERNALS - -#include "tripe.h" - -#ifdef TUN_UNET -# include -# include -# include -#endif - -/*----- Main code ---------------------------------------------------------*/ - -#ifdef TUN_UNET - -struct tunnel { - const tunnel_ops *ops; /* Pointer to operations */ - sel_file f; /* Selector for Usernet device */ - struct peer *p; /* Pointer to my peer */ -}; - -/* --- @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) -{ - static char b[UNET_NAMEMAX]; - struct unet_info uni; - if (ioctl(t->f.fd, UNIOCGINFO, &uni)) { - a_warn("TUN", "-", "unet", "getinfo-error", "?ERRNO", A_END); - return (""); - } - if (strlen(uni.uni_ifname) + 1 > sizeof(b)) { - a_warn("TUN", "-", "unet", "ifname-too-long", A_END); - return (""); - } - strcpy(b, uni.uni_ifname); - return (b); -} - -/* --- @t_read@ --- * - * - * Arguments: @int fd@ = file descriptor to read - * @unsigned mode@ = what's happened - * @void *v@ = pointer to tunnel block - * - * Returns: --- - * - * Use: Reads data from the tunnel. - */ - -static void t_read(int fd, unsigned mode, void *v) -{ - tunnel *t = v; - ssize_t n; - buf b; - - n = read(fd, buf_i, sizeof(buf_i)); - if (n < 0) { - a_warn("TUN", "%s", t_ifname(t), "read-error", "?ERRNO", A_END); - return; - } - IF_TRACING(T_TUNNEL, { - trace(T_TUNNEL, "tun-unet: packet arrived"); - trace_block(T_PACKET, "tun-unet: packet contents", buf_i, n); - }) - buf_init(&b, buf_i, n); - p_tun(t->p, &b); -} - -/* --- @t_init@ --- * - * - * Arguments: --- - * - * Returns: --- - * - * Use: Initializes the tunneling system. Maybe this will require - * opening file descriptors or something. - */ - -static void t_init(void) { return; } - -/* --- @t_create@ --- * - * - * Arguments: @tunnel *t@ = pointer to tunnel block - * @peer *p@ = pointer to peer block - * - * Returns: A tunnel block if it worked, or null on failure. - * - * Use: Initializes a new tunnel. - */ - -static tunnel *t_create(peer *p) -{ - int fd; - tunnel *t; - int f; - - if ((fd = open("/dev/unet", O_RDWR)) < 0) { - a_warn("TUN", "-", "unet", "open-error", "/dev/unet", "?ERRNO", A_END); - return (0); - } - fdflags(fd, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC); - if ((f = ioctl(fd, UNIOCGIFFLAGS)) < 0 || - ioctl(fd, UNIOCSIFFLAGS, f | IFF_POINTOPOINT)) { - a_warn("TUN", "-", "unet", "config-error", "?ERRNO", A_END); - close(fd); - return (0); - } - t = CREATE(tunnel); - t->ops = &tun_unet; - t->p = p; - sel_initfile(&sel, &t->f, fd, SEL_READ, t_read, t); - sel_addfile(&t->f); - T( trace(T_TUNNEL, "tun-unet: attached interface %s to peer `%s'", - t_ifname(t), p_name(p)); ) - return (t); -} - -/* --- @t_inject@ --- * - * - * Arguments: @tunnel *t@ = pointer to tunnel block - * @buf *b@ = buffer to send - * - * Returns: --- - * - * Use: Injects a packet into the local network stack. - */ - -static void t_inject(tunnel *t, buf *b) -{ - IF_TRACING(T_TUNNEL, { - 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)); -} - -/* --- @t_destroy@ --- * - * - * Arguments: @tunnel *t@ = pointer to tunnel block - * - * Returns: --- - * - * Use: Destroys a tunnel. - */ - -static void t_destroy(tunnel *t) -{ - sel_rmfile(&t->f); - close(t->f.fd); - DESTROY(t); -} - -const tunnel_ops tun_unet = { - "unet", - t_init, - t_create, - t_ifname, - t_inject, - t_destroy -}; - -#endif - -/*----- That's all, folks -------------------------------------------------*/