#!/bin/bash
#
# Cron-driven bot to start a rrqnet cables or switch unless already up

RRQNET=/usr/sbin/rrqnet

function start-switch() {
    . $1
    exec $RRQNET $VERBOSE -4 $PORT ${VPN[@]}
}

function start-cable() {
    . $1
    ip link show dev $TAP > /dev/null || \
	{ ip tuntap add $TAP mode tap ; ip link set dev $TAP up ; }
    [ -z "$MAC" ] || ifconfig $TAP | grep -q "ether $MAC" || \
	ifconfig $TAP hw ether $MAC
    [ -z "$IP" ] || ip addr show dev $TAP | grep -q $IP || \
	ifconfig $TAP $IP up
    [ -z "$BR" ] || brctl show | grep -q $TAP || \
	brctl addif $BR $TAP
    exec $RRQNET $VERBOSE -4 ${OPTIONS[@]} -t $TAP $PORT ${VPN[@]}
}

for CABLE in $* ; do
    CONF=/etc/rrqnet/conf.d/$CABLE.conf
    eval $(grep ^PORT= $CONF)
    lsof -i :$PORT > /dev/null && continue
    eval $(grep ^TAP= $CONF)
    LOG=/tmp/$CABLE.log
    if [ -z "$TAP" ] ; then
	( start-switch $CONF < /dev/null >> $LOG 2>&1 & )
    else
	( start-cable $CONF /dev/null >> $LOG 2>&1 & )
    fi
done
