#!/bin/sh
# ifup configuration script for the Ralink reference driver w/o WPA supplicant
# Supported: wireless-essid, wireless-channel, wireless-key, wireless-mode, wpa-ssid, and wpa-psk

case "$IFACE" in
ra[0-9]) ;;
*) exit ;;
esac

MODULES_STA=rt5572sta
MODULES_AP_INS="rtutil5572ap rt5572ap rtnet5572ap"
MODULES_AP_RM="rtnet5572ap rt5572ap rtutil5572ap"


ifconfig "$IFACE" down
case "$IF_WIRELESS_MODE" in
	master)
		DAT=/etc/Wireless/RT2870AP/RT2870AP.dat
		for i in $MODULES_STA; do rmmod  $i; done
		for i in $MODULES_AP_INS ; do insmod /lib/modules/$i.ko; done
		;;
	*|managed)
		DAT=/etc/Wireless/RT2870STA/RT2870STA.dat
		for i in $MODULES_AP_RM ; do rmmod  $i; done
		for i in $MODULES_STA; do insmod /lib/modules/$i.ko; done
		;;
esac

(
if [ -n "$IF_WIRELESS_CHANNEL" ]; then
	echo "/^Channel=/cChannel=$IF_WIRELESS_CHANNEL"
fi

if [ -n "$IF_WPA_PSK" ]; then
	echo "/^WPAPSK=/cWPAPSK=$IF_WPA_PSK"
	echo "/^EncrypType=/cEncrypType=AES"
	echo "/^AuthMode=/cAuthMode=WPA2PSK"
	if [ -n "$IF_WPA_SSID" ]; then
		echo "/^SSID=/cSSID=$IF_WPA_SSID"
	elif [ -n "$IF_WIRELESS_ESSID" ]; then
		echo "/^SSID=/cSSID=$IF_WIRELESS_ESSID"
	fi
elif [ -n "$IF_WIRELESS_KEY" ]; then
	case "$IF_WIRELESS_KEY" in
		[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z]|\
	[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]|\
	[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z]-[0-9a-zA-Z][0-9a-zA-Z]|\
	[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z])
			echo "/^AuthMode=/cAuthMode=WEPAUTO"
			echo "/^EncrypType=/cEncrypType=WEP"
			echo "/^Key1Type=/cKey1Type=0"
			echo "/^Key1Str=/cKey1Str=$IF_WIRELESS_KEY"
			;;
		s:*)
			echo "/^AuthMode=/cAuthMode=WEPAUTO"
			echo "/^EncrypType=/cEncrypType=WEP"
			echo "/^Key1Type=/cKey1Type=1"
			echo "/^Key1Str=/cKey1Str=${IF_WIRELESS_KEY#s:}"
			;;
		off)
			echo "/^AuthMode=/cAuthMode=OPEN"
			echo "/^EncrypType=/cEncrypType=NONE"
			;;
		*)
			echo rakey "$@" failed 1>&2
			exit 1
			;;
	esac
	if [ -n "$IF_WIRELESS_ESSID" ]; then
		echo "/^SSID=/cSSID=$IF_WIRELESS_ESSID"
	elif [ -n "$IF_WPA_SSID" ]; then
		echo "/^SSID=/cSSID=$IF_WPA_SSID"
	fi
fi
) > /tmp/network-ralink

if [ -f "$DAT" -a ! -L "$DAT" ]; then
	mv "$DAT" "${DAT%dat}org"
fi

sed -f /tmp/network-ralink "${DAT%dat}org" > /tmp/ralink.dat
ln -sf /tmp/ralink.dat "$DAT"
rm /tmp/network-ralink
