#!/bin/sh

CONF_DIR=/etc
MODULES_DIR=/usr/lib/awds 

CONF_FILE=$CONF_DIR/awds.conf
[ -e $CONF_FILE ] && source $CONF_FILE

grep -q tun /proc/modules || find /lib/modules/$(uname -r) -name tun.*o -exec insmod {} \;

# use this for early detection of wrong configured stack:
export LD_BIND_NOW=1
export LD_LIBRARY_PATH=$MODULES_DIR

cd $(dirname $0)

if [ $NET_DEV = auto ]
then
AUTODEV=$(grep -E -v "Inte|face" /proc/net/wireless | tr ":" " " | ( read a b; echo $a ) )
else
AUTODEV=$NET_DEV
fi

# argv1 can override the setting
DEVICE=${1:-$AUTODEV}

AESCCM=''
if [ x$USE_ENCRYPTION = xyes ]
then 
AESCCM="aesccm.so -k $KEY_FILE"
fi

AWDS_SHELL=''
[ "$USE_AWDS_SHELL" = yes ] && AWDS_SHELL='shell.so'

AWDS_TOPO=''
[ "$USE_TOPO_EXPORT" = yes ] && AWDS_TOPO='topowatch.so'

AWDS_DAEMON=''
[ "$2" = -N ] && DAEMONIZE=no
PIDFILE=${PIDFILE:-/var/run/awds.pid}
[ "$DAEMONIZE" = yes ] && AWDS_DAEMON="daemon.so --pidfile $PIDFILE"



if [ "$DEV_CHANGE_WIRELESS_SETTINGS" = yes ]
then
    ifconfig $DEVICE down
    iwconfig $DEVICE mode ad-hoc channel $DEV_WIRELESS_CHANNEL essid $DEV_WIRELESS_ESSID
    ifconfig $DEVICE mtu 2000
    ifconfig $DEVICE up
    
    # madwifi bug workaround:
    # set uapsd option to zero, if available
    iwpriv $DEVICE 2>&1 | grep -q uapsd && iwpriv $DEVICE uapsd 0
fi

AWDS_EXTENSIONS=''
if [ -d /etc/awds.d ]
then
    FILES=$(find /etc/awds.d/ -xtype f | sort )
    for i in $FILES; do
	source $i
    done
fi


name="$HOSTNAME"
[ -z "$name" -a -x /bin/hostname ] && name=$(/bin/hostname)
[ -z "$name" -a -f /proc/sys/kernel/hostname ] && name=$(cat /proc/sys/kernel/hostname)

# echo Starting AWDS on $DEVICE

exec gea_start -i <<END
$AWDS_SHELL
$AWDS_DAEMON
rawbasic.so $DEVICE
awdsrouting.so --name $name
pinger.so
$AESCCM
tapiface2.so
$AWDS_TOPO
topolock.so
$AWDS_EXTENSIONS
END

