diff options
Diffstat (limited to 'repo/vde2')
-rw-r--r-- | repo/vde2/inline.patch | 21 | ||||
-rw-r--r-- | repo/vde2/musl-build-fix.patch | 15 | ||||
-rw-r--r-- | repo/vde2/vde2.post-down | 37 | ||||
-rw-r--r-- | repo/vde2/vde2.pre-install | 6 | ||||
-rw-r--r-- | repo/vde2/vde2.pre-up | 74 | ||||
-rw-r--r-- | repo/vde2/vde2.xibuild | 41 | ||||
-rw-r--r-- | repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch | 92 |
7 files changed, 286 insertions, 0 deletions
diff --git a/repo/vde2/inline.patch b/repo/vde2/inline.patch new file mode 100644 index 0000000..b11840f --- /dev/null +++ b/repo/vde2/inline.patch @@ -0,0 +1,21 @@ +diff --git a/src/vde_switch/fstp.c b/src/vde_switch/fstp.c +index ac5e313..26c5a67 100644 +--- a/src/vde_switch/fstp.c ++++ b/src/vde_switch/fstp.c +@@ -30,14 +30,14 @@ static int numports; + #ifdef FSTP + #include <fstp.h> + /*********************** sending macro used by FSTP & Core ******************/ +-void inline ltonstring(unsigned long l,unsigned char *s) { ++static void ltonstring(unsigned long l,unsigned char *s) { + s[3]=l; l>>=8; + s[2]=l; l>>=8; + s[1]=l; l>>=8; + s[0]=l; + } + +-unsigned long inline nstringtol(unsigned char *s) { ++static unsigned long nstringtol(unsigned char *s) { + return (s[0]<<24)+(s[1]<<16)+(s[2]<<8)+s[3]; + } + diff --git a/repo/vde2/musl-build-fix.patch b/repo/vde2/musl-build-fix.patch new file mode 100644 index 0000000..c03459c --- /dev/null +++ b/repo/vde2/musl-build-fix.patch @@ -0,0 +1,15 @@ +diff --git a/src/vdetaplib/libvdetap.c b/src/vdetaplib/libvdetap.c +index 00cd401..c70f290 100644 +--- a/src/vdetaplib/libvdetap.c ++++ b/src/vdetaplib/libvdetap.c +@@ -121,6 +121,10 @@ int open(const char *path, int flags, ...) + return native_open(path, flags, data); + } + ++/* musl apparently defines open64 as a macro */ ++#ifdef open64 ++#undef open64 ++#endif + int open64(const char *path, int flags, ...) + { + va_list ap; diff --git a/repo/vde2/vde2.post-down b/repo/vde2/vde2.post-down new file mode 100644 index 0000000..be5f5b3 --- /dev/null +++ b/repo/vde2/vde2.post-down @@ -0,0 +1,37 @@ +#!/bin/sh + +VDE_SWITCH=/usr/bin/vde_switch +SLIRPVDE=/usr/bin/slirpvde + +# this is not an interesting stanza for us +if [ -z "$IF_VDE2_SWITCH" -a -z "$IF_VDE2_PLUG" -a -z "$IF_VDE2_SLIRP" ]; then + exit 0 +fi + +PIDFILE="/var/run/vde2/$IFACE-plug.pid" +CTLFILE="/var/run/vde2/$IFACE.ctl" +if [ -f $PIDFILE ]; then + start-stop-daemon --stop --quiet --pidfile $PIDFILE + rm -f $PIDFILE +fi + +PIDFILE="/var/run/vde2/$IFACE-slirp.pid" +if [ -f $PIDFILE ]; then + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + --exec $SLIRPVDE + rm -f $PIDFILE +fi + +PIDFILE="/var/run/vde2/$IFACE.pid" +CTLDIR="/var/run/vde2/$IFACE.ctl" +if [ -f $PIDFILE ]; then + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + --exec $VDE_SWITCH + rm -f $PIDFILE + + # set the tap interface to non-persistant, see #568363 + vde_tunctl -b -d $IFACE 1>/dev/null +fi + +rm -rf $CTLDIR +rm -f $CTLDIR.* diff --git a/repo/vde2/vde2.pre-install b/repo/vde2/vde2.pre-install new file mode 100644 index 0000000..3c3e08d --- /dev/null +++ b/repo/vde2/vde2.pre-install @@ -0,0 +1,6 @@ +#!/bin/sh + +addgroup -S vde2-net 2>/dev/null +adduser -S -D -H -h /var/run/vde2 -s /sbin/nologin -G vde2-net -g vde2-net vde2-net 2>/dev/null + +exit 0 diff --git a/repo/vde2/vde2.pre-up b/repo/vde2/vde2.pre-up new file mode 100644 index 0000000..991b382 --- /dev/null +++ b/repo/vde2/vde2.pre-up @@ -0,0 +1,74 @@ +#!/bin/sh + +VDE_SWITCH=/usr/bin/vde_switch +VDE_PLUG=/usr/bin/vde_plug +SLIRPVDE=/usr/bin/slirpvde +DPIPE=/usr/bin/dpipe +RUNDIR=/var/run/vde2 + +USER=vde2-net +GROUP=vde2-net + +if [ ! -x $VDE_SWITCH ] || [ ! -x $SLIRPVDE ]; then + exit 0 +fi + +# this is not an interesting stanza for us +if [ -z "$IF_VDE2_SWITCH" -a -z "$IF_VDE2_PLUG" -a -z "$IF_VDE2_SLIRP" ]; then + exit 0 +fi + + +# Create directory if missing +if [ ! -d $RUNDIR ]; then + mkdir -p $RUNDIR + chown vde2-net:vde2-net $RUNDIR + chmod 2770 $RUNDIR +fi + +# vde2-switch [-|<args>] +if [ -n "$IF_VDE2_SWITCH" ]; then + set -- $IF_VDE2_SWITCH + test "$1" = "-" && shift + PIDFILE="$RUNDIR/$IFACE.pid" + CTLDIR="$RUNDIR/$IFACE.ctl" + MGMTFILE="$RUNDIR/$IFACE.mgmt" + + if [ "$METHOD" = "manual" ]; then + TAPOPTS="" + else + TAPOPTS="-t $IFACE" + fi + + # block to make sure the interface exists, see #568363 + vde_tunctl -b -t $IFACE 1>/dev/null + + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --exec $VDE_SWITCH -- \ + -s $CTLDIR -m 660 -g $GROUP -p $PIDFILE $TAPOPTS \ + -M $MGMTFILE --mgmtmode 660 -d "$@" +fi + +# vde2-plug <dpipe_cmd2> +if [ -n "$IF_VDE2_PLUG" ]; then + set -- $IF_VDE2_PLUG + PIDFILE="$RUNDIR/$IFACE-plug.pid" + CTLDIR="$RUNDIR/$IFACE.ctl" + + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --make-pidfile --background \ + --exec $DPIPE -- $VDE_PLUG -g $GROUP -m 660 $CTLDIR = "$@" +fi + +# vde2-slirp [-|<args>] +if [ -n "$IF_VDE2_SLIRP" ]; then + set -- $IF_VDE2_SLIRP + test "$1" = "-" && shift + PIDFILE="$RUNDIR/$IFACE-slirp.pid" + CTLDIR="$RUNDIR/$IFACE.ctl" + + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --chuid $USER \ + --exec $SLIRPVDE -- \ + -s $CTLDIR -m 660 -p $PIDFILE -d "$@" +fi diff --git a/repo/vde2/vde2.xibuild b/repo/vde2/vde2.xibuild new file mode 100644 index 0000000..6809cc4 --- /dev/null +++ b/repo/vde2/vde2.xibuild @@ -0,0 +1,41 @@ +#!/bin/sh + +NAME="vde2" +DESC="VDE: Virtual Distributed Ethernet. User mode networking for QEMU, UML, etc." + +MAKEDEPS="linux-headers openssl libpcap python" + +PKG_VER=2.3.2 +SOURCE="https://downloads.sourceforge.net/project/vde/vde2/$PKG_VER/vde2-$PKG_VER.tar.gz" + +ADDITIONAL=" +inline.patch +musl-build-fix.patch +vde2.post-down +vde2.pre-install +vde2.pre-up +vde_cryptcab-compile-against-openssl-1.1.0.patch +" + +prepare() { + apply_patches +} + +build() { + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make -C src/common + make -j1 -C src/lib + make +} + +package() { + cd "$BUILD_ROOT" + make -j1 DESTDIR="$PKG_DEST" install + + install -Dm755 "$BUILD_ROOT"/vde2.pre-up \ + "$PKG_DEST"/etc/network/if-pre-up.d/vde2 + install -Dm755 "$BUILD_ROOT"/vde2.post-down \ + "$PKG_DEST"/etc/network/if-post-down.d/vde2 +} diff --git a/repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch b/repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch new file mode 100644 index 0000000..227312e --- /dev/null +++ b/repo/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch @@ -0,0 +1,92 @@ +--- a/src/vde_cryptcab/cryptcab.c 2011-11-23 16:41:17.000000000 +0000 ++++ b/src/vde_cryptcab/cryptcab.c 2017-03-20 22:54:20.452975075 +0000 +@@ -22,7 +22,7 @@ + exit(1); + } + +-static EVP_CIPHER_CTX ctx; ++static EVP_CIPHER_CTX *ctx; + static int ctx_initialized = 0; + static int encryption_disabled = 0; + static int nfd; +@@ -30,6 +30,10 @@ + static struct vde_open_args open_args={.port=0,.group=NULL,.mode=0700}; + static int verbose = 0; + ++#if OPENSSL_VERSION_NUMBER < 0x10100000 ++#define EVP_CIPHER_CTX_reset(x) EVP_CIPHER_CTX_cleanup(x) ++#endif ++ + void vc_printlog(int priority, const char *format, ...) + { + va_list arg; +@@ -103,19 +107,21 @@ + } + + if (!ctx_initialized) { +- EVP_CIPHER_CTX_init (&ctx); ++ ctx = EVP_CIPHER_CTX_new (); ++ if (!ctx) ++ return -1; + ctx_initialized = 1; + } + +- EVP_EncryptInit (&ctx, EVP_bf_cbc (), p->key, p->iv); +- if (EVP_EncryptUpdate (&ctx, dst, &olen, src, len) != 1) ++ EVP_EncryptInit (ctx, EVP_bf_cbc (), p->key, p->iv); ++ if (EVP_EncryptUpdate (ctx, dst, &olen, src, len) != 1) + { + fprintf (stderr,"error in encrypt update\n"); + olen = -1; + goto cleanup; + } + +- if (EVP_EncryptFinal (&ctx, dst + olen, &tlen) != 1) ++ if (EVP_EncryptFinal (ctx, dst + olen, &tlen) != 1) + { + fprintf (stderr,"error in encrypt final\n"); + olen = -1; +@@ -124,7 +130,7 @@ + olen += tlen; + + cleanup: +- EVP_CIPHER_CTX_cleanup(&ctx); ++ EVP_CIPHER_CTX_reset(ctx); + return olen; + } + +@@ -138,19 +144,21 @@ + } + + if (!ctx_initialized) { +- EVP_CIPHER_CTX_init (&ctx); ++ ctx = EVP_CIPHER_CTX_new (); ++ if (!ctx) ++ return -1; + ctx_initialized = 1; + } + +- EVP_DecryptInit (&ctx, EVP_bf_cbc (), p->key, p->iv); +- if (EVP_DecryptUpdate (&ctx, dst, &olen, src, len) != 1) ++ EVP_DecryptInit (ctx, EVP_bf_cbc (), p->key, p->iv); ++ if (EVP_DecryptUpdate (ctx, dst, &olen, src, len) != 1) + { + fprintf (stderr,"error in decrypt update\n"); + olen = -1; + goto cleanup; + } + +- if (EVP_DecryptFinal (&ctx, dst + olen, &tlen) != 1) ++ if (EVP_DecryptFinal (ctx, dst + olen, &tlen) != 1) + { + fprintf (stderr,"error in decrypt final\n"); + olen = -1; +@@ -159,7 +167,7 @@ + olen += tlen; + + cleanup: +- EVP_CIPHER_CTX_cleanup(&ctx); ++ EVP_CIPHER_CTX_reset (ctx); + return olen; + } + |