From cd441c5f29433a3bffeedd9d10e46eb3eeef7d63 Mon Sep 17 00:00:00 2001 From: David Scott Date: Thu, 12 May 2016 15:38:33 +0100 Subject: [PATCH] tap-vsockd: add a function to open a TAP device Signed-off-by: David Scott --- alpine/packages/tap-vsockd/Dockerfile | 2 +- alpine/packages/tap-vsockd/tap-vsockd.c | 42 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/alpine/packages/tap-vsockd/Dockerfile b/alpine/packages/tap-vsockd/Dockerfile index 7f08ede6e..74f5ce00d 100644 --- a/alpine/packages/tap-vsockd/Dockerfile +++ b/alpine/packages/tap-vsockd/Dockerfile @@ -1,6 +1,6 @@ FROM alpine:3.3 -RUN apk update && apk upgrade && apk add alpine-sdk util-linux-dev +RUN apk update && apk upgrade && apk add alpine-sdk util-linux-dev linux-headers RUN mkdir -p /tap-vsockd WORKDIR /tap-vsockd diff --git a/alpine/packages/tap-vsockd/tap-vsockd.c b/alpine/packages/tap-vsockd/tap-vsockd.c index c982f5d2a..449591ef3 100644 --- a/alpine/packages/tap-vsockd/tap-vsockd.c +++ b/alpine/packages/tap-vsockd/tap-vsockd.c @@ -6,10 +6,52 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + #include "compat.h" int verbose_flag = 0; +int alloc_tap(char *dev) { + int fd; + struct ifreq ifr; + const char *clonedev = "/dev/net/tun"; + if ((fd = open(clonedev, O_RDWR)) == -1) { + perror("Failed to open /dev/net/tun"); + exit(1); + } + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_flags = IFF_TAP | IFF_NO_PI; + strncpy(ifr.ifr_name, dev, IFNAMSIZ); + if (ioctl(fd, TUNSETIFF, (void*) &ifr) < 0) { + perror("TUNSETIFF failed"); + exit(1); + } + int persist = 1; + if (ioctl(fd, TUNSETPERSIST, persist) < 0) { + perror("TUNSETPERSIST failed"); + exit(1); + } + fprintf(stderr, "successfully created TAP device %s\n", dev); + return fd; +} + + #define SVR_BUF_LEN (3 * 4096) #define MAX_BUF_LEN (2 * 1024 * 1024)