#! /bin/sh
#
# etc/wlan/wlan-setup
#
# Copyright (C) 2003 Lineo Solutions, Inc.  All Rights Reserved.
# --------------------------------------------------------------------
#
# set up wlan.conf and wlancfg-<SSID> for Sarp SL
#
# wlan-setup action device scheme 
#     action : start | stop
#     device : wlan0 ...
#     scheme : pcmcia scheme
#

usage ()
{
	echo "usage: wlan-setup {start|stop} device scheme"
	exit 1
}

is_usb()
{
	NSD_NAME=`grep 'nsd name' /proc/net/p80211/$1/wlandev | sed -e 's/.*: \(.*\)/\1/'`
	if [ "$NSD_NAME" = "prism2_usb" ]; then
		return 1
	else
		return 0
	fi
}

do_wlan_agent()
{
	ACTION=$1
	INTERFACE=$2
	is_usb $INTERFACE
	NSDNAME=$NSD_NAME
	if [ -x /etc/hotplug/wlan.agent ]; then
		export ACTION
		export INTERFACE
		export NSDNAME
		/etc/hotplug/wlan.agent
	fi
}


cd /etc/wlan
WLAN_NG_OPTS_FILE=/etc/pcmcia/wlan-ng.opts
WLAN_CONF_FILE=wlan.conf

DEVICE=$2
SCHEME=$3

case "$1" in
'start')
	# create wlancfg-<SSID> file
	if [ -z "$DEVICE" -o -z "$SCHEME" ]; then
		usage
	fi
	if [ -z "`ifconfig -a | grep ^$DEVICE`" ]; then
		echo "$DEVICE not found"
		exit 1
	fi
	if [ -z "`grep ^$SCHEME.*\) $WLAN_NG_OPTS_FILE`" ]; then
		echo "scheme ($SCHEME) not found"
		exit 1
	fi

	ADDRESS="$SCHEME,$SOCKET,$INSTANCE,$HWADDR"
	. $WLAN_NG_OPTS_FILE

	KEYS_IN_OPTS="\
		dot11PrivacyInvoked \
		dot11WEPDefaultKeyID \
		PRIV_KEY128 \
		dot11WEPDefaultKey0 \
		dot11WEPDefaultKey1 \
		dot11WEPDefaultKey2 \
		dot11WEPDefaultKey3 \
		IS_ADHOC \
		AuthType \
		CHANNEL \
		BCNINT \
		BASICRATES \
		OPRATES \
	"

	# DesiredSSID is "" when set SSID=ANY by QT
	# if [ -n "$DesiredSSID" ]; then
	if [ -n "$DesiredSSID" -o "$dot11PrivacyInvoked" = "true" -o "$IS_ADHOC" = "y" ]; then
    		CMD='cat wlancfg-DEFAULT | sed'
    		for i in $KEYS_IN_OPTS;
    		do
			value=`eval echo \\$"$i"`
			#CMD="$CMD -e s/^$i=.*/$i=$value/"
			CMD="$CMD -e \"s/^$i=.*/$i=\\\"$value\\\"/\""
		done
		#echo $CMD
		eval $CMD >  wlancfg-$DesiredSSID
	fi 
 
	# create wlan.conf file
	res=`grep ^ENABLE_$DEVICE=.* $WLAN_CONF_FILE`
	if [ -n "$res" ] ;then
		mv $WLAN_CONF_FILE $WLAN_CONF_FILE.orig
		grep -v ^\\\(SSID\\\|ENABLE\\\|SCHEME\\\)_$DEVICE=.* $WLAN_CONF_FILE.orig > $WLAN_CONF_FILE
	fi
	(echo SSID_$DEVICE=\"$DesiredSSID\" ; echo SCHEME_$DEVICE=$SCHEME ; echo ENABLE_$DEVICE=$WLAN_ENABLE) >> $WLAN_CONF_FILE

	is_usb $DEVICE
	if [ $? = 1 ]; then
		do_wlan_agent register $DEVICE
	fi
	;;

'stop')
	if [ -z "$DEVICE" ]; then
		usage
	fi

	is_usb $DEVICE
	if [ $? = 1 ]; then
		do_wlan_agent remove $DEVICE
	fi

	. ./$WLAN_CONF_FILE
	mv $WLAN_CONF_FILE $WLAN_CONF_FILE.orig
	grep -v ^\\\(SSID\\\|ENABLE\\\|SCHEME\\\)_$DEVICE=.* $WLAN_CONF_FILE.orig > $WLAN_CONF_FILE
	ESSID=`eval echo \\$SSID_$DEVICE`
	#if [ -n "$ESSID" ]; then
		rm -f wlancfg-$ESSID
	#fi
	;;

*)
	usage
	;;

esac

 exit 0

