summaryrefslogtreecommitdiff
path: root/package/base-files/src/etc/network/if-pre-up.d/04-wireless
blob: e7f83a76eda4cb4b3bcb38fca5b9180aea3320e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/sh 
set -e 

[ "${IFACE%%[0-9]*}" = "wlan" ] || exit 0

[ "$IF_WIRELESS_SSID" ] || exit 1
[ "$IF_WIRELESS_HWMODE" ] || IF_WIRELESS_HWMODE=g
[ "$IF_WIRELESS_EXTENSION" ] || IF_WIRELESS_EXTENSION=0

[ -x /usr/sbin/rfkill ] && rfkill unblock wlan 2>/dev/null

wpa=0
wpa1=0
wpa2=0
pairwise=""

case "$IF_WIRELESS_SECURITY" in
	none)
		sec=1
		;;
	wep)
		sec=2
		;;
	wpa)
		sec=1
		wpa1=1
		pairwise=TKIP
		;;
	wpa2)
		sec=1
		wpa2=1
		pairwise=CCMP
		;;
	wpa+wpa2)
		sec=1
		wpa=1
		;;
	*)
		sec=1
		;;
esac

[ "$IF_WIRELESS_PAIRWISE" ] || IF_WIRELESS_PAIRWISE=$pairwise

case "$IF_WIRELESS_MODE" in
	ap)
		logger -t hostap "Creating hostapd configuration"
		cat /etc/hostapd.conf > /tmp/hostapd.conf
		chmod 600 /tmp/hostapd.conf
		echo "interface=${IFACE}" >> /tmp/hostapd.conf
		echo "ssid=$IF_WIRELESS_SSID" >> /tmp/hostapd.conf
		echo "channel=$IF_WIRELESS_CHANNEL" >> /tmp/hostapd.conf
		echo "hw_mode=$IF_WIRELESS_HWMODE" >> /tmp/hostapd.conf
		echo "auth_algs=$sec" >> /tmp/hostapd.conf
		[ $wpa -eq 0 ] && [ $wpa1 -eq 0 ] && [ $wpa2 -eq 0 ] && {
			logger -t hostap "using no security mechanism"
			echo "wpa=0" >> /tmp/hostapd.conf
		}
		[ $wpa1 -eq 1 ] && {
			logger -t hostap "using WPA for security"
			echo "wpa=1" >> /tmp/hostapd.conf
			echo "wpa_key_mgmt=WPA-PSK" >> /tmp/hostapd.conf
			echo "wpa_pairwise=$IF_WIRELESS_PAIRWISE" >> /tmp/hostapd.conf
			echo "wpa_passphrase=$IF_WIRELESS_PASSPHRASE" >> /tmp/hostapd.conf
		}
		[ $wpa2 -eq 1 ] && {
			logger -t hostap "using WPA2 for security"
			echo "wpa=2" >> /tmp/hostapd.conf
			echo "wpa_key_mgmt=WPA-PSK" >> /tmp/hostapd.conf
			echo "rsn_pairwise=$IF_WIRELESS_PAIRWISE" >> /tmp/hostapd.conf
			echo "wpa_passphrase=$IF_WIRELESS_PASSPHRASE" >> /tmp/hostapd.conf
		}
		[ $wpa -eq 1 ] && {
			logger -t hostap "using WPA and WPA2 for security"
			echo "wpa=3" >> /tmp/hostapd.conf
			echo "wpa_key_mgmt=WPA-PSK" >> /tmp/hostapd.conf
			echo "wpa_pairwise=TKIP" >> /tmp/hostapd.conf
			echo "rsn_pairwise=CCMP" >> /tmp/hostapd.conf
			echo "wpa_passphrase=$IF_WIRELESS_PASSPHRASE" >> /tmp/hostapd.conf
		}
		[ -f /etc/hostapd.conf.post ] && \
			cat /etc/hostapd.conf.post >> /tmp/hostapd.conf
		;;
	sta)
		ip link set up dev ${IFACE}
		[ $IF_WIRELESS_EXTENSION -eq 1 ] && {
			[ -x /usr/sbin/iwconfig ] || {
				logger -t wireless "No wireless-tools found"	
				exit 1
			}
			driver=wext
			iwconfig ${IFACE} essid $IF_WIRELESS_SSID
		} || {
			[ -x /usr/sbin/iw ] || {
				logger -t wireless "No iw utility found"
				exit 1
			}
			driver=nl80211
			[ $sec -eq 2 ] && {
				iw dev ${IFACE} connect $IF_WIRELESS_SSID key d:0:$IF_WIRELESS_PASSPHRASE
			} || {
				iw dev ${IFACE} connect $IF_WIRELESS_SSID
			}
		}
		[ $wpa2 -eq 1 ] && {
			[ -x /usr/sbin/wpa_supplicant ] || {
				logger -t wireless "No wpa_supplicant found"
				exit 1
			}
			touch /tmp/wpa_supplicant.conf
			chmod 600 /tmp/wpa_supplicant.conf
			echo "network={" > /tmp/wpa_supplicant.conf
			echo " ssid=\"$IF_WIRELESS_SSID\"" >> /tmp/wpa_supplicant.conf
		 	echo " psk=\"$IF_WIRELESS_PASSPHRASE\"" >> /tmp/wpa_supplicant.conf
			echo " priority=5" >> /tmp/wpa_supplicant.conf
			echo "}"  >> /tmp/wpa_supplicant.conf
			wpa_supplicant -B -D${driver} -i${IFACE} -P/var/run/wpa_supplicant.pid -c/tmp/wpa_supplicant.conf
		}
		;;
	*)
		echo "Unknown operation mode $IF_WIRELESS_MODE given!"
		exit 1
		;;
esac
exit 0