#!/bin/sh
# USAGE: ifup-sta <wlan-dev> <wlan-prof>
# Read [WLAN%d] section of $HOME/.cerevo.ini,
# Overwrite the profile named <wlan-prof> of /etc/network/interfaces,
# and exec ifup <wlan-dev>=<wlan-prof>

iface_extract () { awk '/^ *iface/{x=0}/^ *iface +'$1'/{x=1}(x){print}';  }
iface_exclude () { awk '/^ *iface/{x=0}/^ *iface +'$1'/{x=1}(!x){print}'; }
probe_netdev () { [ -e /sys/class/net/$1 ]; }
get_using_ssid () {
	sed -n \
		-e '/^[  ]*wpa-ssid/{s/^[        ]*wpa-ssid[     ]*\(\\ \|\)\(.*\)/\1\2/;p;}' \
		-e '/^[  ]*wireless_essid/{s/^[  ]*wireless_essid[       ]*\(--\|\)[     ]*\(\\ \|\)\(.*\)/\2\3/;p;}' \
		< /etc/network/interfaces
}

cd /etc/network
trap 'rm /tmp/if-lock' INT TERM EXIT
while ! ln -s / /tmp/if-lock 2> /dev/null; do sleep .2; done
for i in rtnet5572ap rt5572ap rtutil5572ap; do rmmod $i; done
for i in rt5572sta; do insmod /lib/modules/$i.ko; done
modprobe musb_hdrc
i=0
while ! probe_netdev ra0; do
	[ $i -eq 2 ] && exit 3
	sleep 1
	i=$((i+1))
done
iface_exclude $2 < interfaces > i
ifconfig $1 0.0.0.0
for i in 1 2 3; do iwlist $1 scan &> /dev/null && sleep 1; done
NETDEV=$1 autowifi $2 | iface_extract $2 >> i
mv i interfaces
sync
rm /tmp/if-lock
trap - INT TERM EXIT
get_using_ssid > /tmp/ifup-sta-ssid
ifup $1=$2
iwpriv $1 set Debug=0 1>&2
iwconfig $1 | grep -q 'Access Point: Not' && exit 2
ifconfig $1 | grep -q 'inet addr' || exit 1
