#######/bin/sh

startWaitfor "/tmp/.hotplugready" 20

if [ `df | grep /dev/mtdblock | grep var | sed 's/ \+/ /g' | cut -d ' ' -f4 | tail -n1 | wc -l` -eq 1 ]; then
	echo "[wlan] checking swapstick..."
	if [ ! -d /var/swap/bin/ ]; then
	    echo "[wlan] no swapstick found!" | tee -a $WLAN_LOG
	    return
	fi
	echo "[wlan] swapstick found" | tee $WLAN_LOG
fi

rm -f /tmp/.networkready

if [ ! -z $WLAN_STARTMODE ] && [ $WLAN_STARTMODE == "load" ]; then
	if  [ ! "$debug" = 'off' ]; then
		echo $CMD ["$INPUT"] startWlan
	fi
        
	[ ! -f /etc/Wireless/wlan.usbmap ] && rm -f /etc/Wireless/wlan_module && return
	WLAN_MODULE=
	MEM=$IFS
	IFS=$'\012'
	echo "[wlan] searching wireless-module ..." | tee -a $WLAN_LOG
	USBIDS=`cat /proc/bus/usb/devices | grep ^P:`
	if [ -f /etc/Wireless/wlan_module ]; then
		WLAN_MODULE=`cat /etc/Wireless/wlan_module | awk {'print $1'}`
		VID=`cat /etc/Wireless/wlan_module | awk {'print $2'}`
		PID=`cat /etc/Wireless/wlan_module | awk {'print $3'}`
	fi
	if [ -z $WLAN_MODULE ] || [ -z "`echo $USBIDS | grep $VID | grep $PID`" ]; then
		for i in $USBIDS; do
			VID=`echo $i | awk {'print $2'} | cut -d"=" -f2`
			PID=`echo $i | awk {'print $3'} | cut -d"=" -f2`
			WLAN_MODULE=
			for j in `cat /etc/Wireless/wlan.usbmap`; do
				if [ `echo $j | awk {'print $3'}` == 0x$VID ] && [ `echo $j | awk {'print $4'}` == 0x$PID ]; then
					WLAN_MODULE=`echo $j | awk {'print $1'}`
					break
				fi
			done
			[ ! -z $WLAN_MODULE ] && break
		done
		[ ! -z $WLAN_MODULE ] && echo $WLAN_MODULE $VID $PID > /etc/Wireless/wlan_module || rm -f /etc/Wireless/wlan_module
	fi
	[ -z $WLAN_MODULE ] && echo "[wlan] no applicable USB WLAN device found" | tee -a $WLAN_LOG && return
	IFS=$MEM
	echo "[wlan] loading $WLAN_MODULE.ko" | tee -a $WLAN_LOG
	[ $WLAN_MODULE == "rt73" ] && insmod /var/swap/modules/funcemu.ko
	insmod /var/swap/modules/$WLAN_MODULE.ko
	sleep 1
	[ -z "`lsmod | grep $WLAN_MODULE`" ] && echo "[wlan] could not load $WLAN_MODULE" | tee -a $WLAN_LOG && return
	sleep 1
	case $WLAN_MODULE in
	    zd1211 | zd1211b )		WLAN_IF=eth1
					WLAN_DRV=zydas
					;;
	    rt73 )			WLAN_IF=rausb0
					WLAN_DRV=ralink
					;;
	    rt2870sta | rt3070sta )	WLAN_IF=ra0
					WLAN_DRV=wext
					;;
	    * )				echo "[wlan] Unknown module $WLAN_MODULE" | tee -a $WLAN_LOG && return
					;;
	esac
	ifconfig $WLAN_IF 0.0.0.0 up
	[ -z "`ifconfig | grep $WLAN_IF`" ] && rmmod $WLAN_MODULE && echo "[wlan] $WLAN_IF not ready" | tee -a $WLAN_LOG && return
	sleep 1

	if [ -z "`cat /var/etc/network/interfaces | grep \"auto $WLAN_IF\"`" ]; then
		echo "[wlan] wireless interface $WLAN_IF not activated" | tee -a $WLAN_LOG
		python /var/etc/network/wlanscan.pyc $WLAN_IF
		ifconfig $WLAN_IF down
		return
	fi
	if [ ! -f /etc/wpa_supplicant.conf ]; then
		echo "[wlan] wireless lan not yet configured" | tee -a $WLAN_LOG
		python /var/etc/network/wlanscan.pyc $WLAN_IF
		ifconfig $WLAN_IF down
		return
	fi
fi
if [ -z $WLAN_STARTMODE ] || [ $WLAN_STARTMODE == "load" ] || [ $WLAN_STARTMODE == "connect" ]; then
	rm -Rf /var/run/wpa_supplicant*
	AP_TRIES=20
	AP=`cat /etc/wpa_supplicant.conf | grep ssid | grep -v scan_ssid | cut -d"=" -f2`
	echo "[wlan] starting wpa_supplicant ..." | tee -a $WLAN_LOG
	/var/bin/wpa_supplicant -B -i $WLAN_IF -P /var/run/wpa_supplicant.pid -D $WLAN_DRV -c /etc/wpa_supplicant.conf
	while [ $AP_TRIES -gt 0 ]; do
		AP_STATE=`/var/bin/wpa_cli -i $WLAN_IF -p /var/run/wpa_supplicant status | grep wpa_state | cut -d"=" -f2`
		[ "$AP_STATE" == "COMPLETED" ] && echo "[wlan] association with $AP completed" | tee -a $WLAN_LOG && break
		AP_TRIES=$((AP_TRIES-1))
		sleep 1
	done
	if [ $AP_TRIES -lt 1 ]; then
		case "$AP_STATE" in
			"SCANNING"  )	echo -e "[wlan] access point $AP not found (scanning aborted...)" | tee -a $WLAN_LOG
			;;
			*           )	echo -e "[wlan] authentification to access point $AP failed" | tee -a $WLAN_LOG
			;;
		esac
		python /var/etc/network/wlanscan.pyc $WLAN_IF
		kill -9 `cat /var/run/wpa_supplicant.pid`
		rm /var/run/wpa_supplicant.pid
		ifconfig $WLAN_IF down
		return
	fi
	python /var/etc/network/wlanscan.pyc $WLAN_IF
	startNetwork $WLAN_IF
	( startWaitfor "/tmp/.networkready" 30
	  IP=`ifconfig $WLAN_IF | grep -m1 "inet addr" | sed s/"^\s*"// | sed s/" \+"/" "/g | cut -d " " -f2 | cut -d ":" -f2`
	  NET=`echo ${IP%.*}`
	  /var/bin/fping -l -b12 -q -i2000 -g $NET.1 $NET.254 2> /dev/null ) &
else
	echo "[wlan] unknown wireless startmode $WLAN_STARTMODE" | tee -a $WLAN_LOG && break
fi
