#!/bin/bash

#
# THIS WAS WRITTEN TO BE A GUIDE, NOT A SCRIPT.
# SO DON'T EXPECT IT TO WORK FOR YOU.
#
# NOW THAT YOU READ THIS, COMMENT/DELETE THE FOLLOWING LINE =;-)
#echo "PLEASE READ THE SCRIPT FIRST" && exit 0

#
# YOU MUST BE ROOT TO RUN THIS SCRIPT
#

#
# EDIT THESE VARIABLES TO MATCH YOUR SETUP
#

# Choose your driver ipw2100 or ipw2200, or anything else for not building any driver
IPW_DRIVER=ipw2100

# Choose your interface name
INTERFACE=eth1

# I guess you know what these are
WPA_ESSID="YOUR_ESSID"
WPA_PSK=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

# Want to run wpa_supplicant with this script?
WPA_SUPP_RUN=1


###############################################################################
# NOTHING TO SEE HERE! SAVE THE FILE AND MOVE ALONG =;-)                      #
###############################################################################



SCRIPT_VERSION="20050214"

ipw2100_VERSION=1.0.5
ipw2200_VERSION=1.0.1
WPA_SUPP_VERSION=0.3.8
WPA_SUPP_PATCHES=""
WPA_SUPP_DRIVER=ipw
WPA_SUPP_CONF=wpa_supplicant-test.conf
# Space separated list of patches
ipw2100_PATCHES=""
ipw2200_PATCHES=""

#
# Build and install the driver
#
if [ X"$IPW_DRIVER" == X"ipw2100" ] || [ X"$IPW_DRIVER" == X"ipw2200" ]; then
	IPW_DRIVER_VERSION_I="${IPW_DRIVER}_VERSION"
	IPW_DRIVER_VERSION=${!IPW_DRIVER_VERSION_I}
	IPW_PATCHES_I="${IPW_DRIVER}_PATCHES"
	IPW_PATCHES=${!IPW_PATCHES_I}
	rm -f ${IPW_DRIVER}-${IPW_DRIVER_VERSION}.tgz
	wget -c http://unc.dl.sourceforge.net/sourceforge/${IPW_DRIVER}/${IPW_DRIVER}-${IPW_DRIVER_VERSION}.tgz &&
	for i in $IPW_PATCHES; do
		rm -f $(basename $i);
		wget -c $i;
	done
	rm -rf ${IPW_DRIVER}-${IPW_DRIVER_VERSION}
	tar zxvf ${IPW_DRIVER}-${IPW_DRIVER_VERSION}.tgz &&
	cd ${IPW_DRIVER}-${IPW_DRIVER_VERSION} &&
	for i in $IPW_PATCHES; do
		patch -p1 < ../$(basename $i)
	done
	make install
	cd -
fi

#
# Build wpa_supplicant
#
rm -f wpa_supplicant-${WPA_SUPP_VERSION}.tar.gz
wget -c http://hostap.epitest.fi/releases/wpa_supplicant-${WPA_SUPP_VERSION}.tar.gz &&
for i in $WPA_SUPP_PATCHES; do
	rm -f $(basename $i);
	wget -c $i;
done
rm -rf wpa_supplicant-${WPA_SUPP_VERSION}
tar zxvf wpa_supplicant-${WPA_SUPP_VERSION}.tar.gz &&
cd wpa_supplicant-${WPA_SUPP_VERSION} &&
for i in $IPW_PATCHES; do
	patch -p1 < ../$(basename $i)
done
cat > .config << _EOF_
CONFIG_CTRL_IFACE=y
CONFIG_DRIVER_WEXT=y
CONFIG_DRIVER_IPW=y
CONFIG_WIRELESS_EXTENSION=y
CONFIG_IEEE8021X_EAPOL=y
CONFIG_EAP_MD5=y
CONFIG_MSCHAPV2=y
CONFIG_EAP_TLS=y
CONFIG_EAP_PEAP=y
CONFIG_EAP_TTLS=y
CONFIG_EAP_GTC=y
CONFIG_EAP_OTP=y
CONFIG_EAP_SIM=y
CONFIG_EAP_LEAP=y
_EOF_
make

#
# Create wpa_supplicant configuration
#
cat > ${WPA_SUPP_CONF} << _EOF_
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
network={
	ssid="${WPA_ESSID}"
	proto=WPA
	key_mgmt=WPA-PSK
	pairwise=CCMP TKIP
	group=CCMP TKIP WEP104 WEP40
	psk=${WPA_PSK}
	priority=2
}
_EOF_

#
# Run wpa_supplicant
#
if [ X"${WPA_SUPP_RUN}" == X"1" ]; then
	modprobe ${IPW_DRIVER}
	ifconfig ${INTERFACE} 0.0.0.0 up
	./wpa_supplicant -dddd -i${INTERFACE} -c${WPA_SUPP_CONF} -D${WPA_SUPP_DRIVER}
fi

