#! /bin/sh

export PATH='/sbin:/bin:/usr/sbin:/usr/bin'

if [ $# -ne 1 ]; then
    echo "Usage: $0 ifname" 1>&2
    exit 1
elif [ ! "`which brctl`" ]; then
    echo 'Missing brctl - please install bridge-utils (or similar)' 1>&2
    exit 1
elif [ ! -c /dev/net/tun ]; then
    modprobe -q tun
    if [ ! -c /dev/net/tun ]; then
	echo 'Kernel appears to lack tun support, cannot continue' 1>&2
	exit 1
    fi
elif [ "`id -u`" -ne 0 ]; then
    if [ -w /var/spool/qemu_q ]; then
	echo "createnet $1" >/var/spool/qemu_q/$$
	until [ -f /var/spool/qemu_q/$$. ]; do
	    usleep 200000
	done
	RETCODE=`tail -n 1 /var/spool/qemu_q/$$. | cut -f1`
	rm /var/spool/qemu_q/$$.
	exit ${RETCODE:1}
    else
	echo 'Must run as root if qemu-privd is not installed' 1>&2
	exit 1
    fi
fi

ifconfig "$1" 0.0.0.0 up

PRIMARY_IF=`netstat -nr | awk '$1 == "0.0.0.0" {print $NF; exit}'`
if [ -z "$PRIMARY_IF" ]; then
    PRIMARY_IF=`ifconfig | awk \
	    '$0 ~ /^[A-Za-z]/ && $1 != "lo" {print $1; exit}'`
fi

if [ -d "/sys/class/net/$PRIMARY_IF/bridge" ]; then
    brctl addif "$PRIMARY_IF" "$1"
else
    echo -e "Converting interface \"$PRIMARY_IF\" to temporary bridge ... \c"
    GWADDR=`netstat -nr | awk '$1 == "0.0.0.0" {print $2; exit}'`
    eval `ifconfig "$PRIMARY_IF" | grep '\<inet addr:' | sed -e \
	    's/inet addr:/IPADDR=/' -e 's/Bcast:/BCAST=/' -e 's/Mask:/MASK=/'`
    ifconfig "$PRIMARY_IF" 0.0.0.0 up
    brctl addbr qemu
    ifconfig qemu "$IPADDR" netmask "$MASK" broadcast "$BCAST" up
    [ -n "$GWADDR" ] && route add -net default gw "$GWADDR"
    brctl addif qemu "$PRIMARY_IF"
    brctl addif qemu "$1"
    sleep 16
    echo 'done.'
fi

exit 0
