slitaz-boot-scripts view etc/init.d/network.sh @ rev 282

network.sh: Use wpa_supplicante for WEP connection and speed up using fgrep
author Christophe Lincoln <pankso@slitaz.org>
date Sat Mar 03 18:14:18 2012 +0100 (2012-03-03)
parents ae2a29072c7d
children 175315b7699d
line source
1 #!/bin/sh
2 # /etc/init.d/network.sh - Network initialization boot script.
3 # Config file is: /etc/network.conf
4 #
5 . /etc/init.d/rc.functions
7 if [ -z "$2" ]; then
8 . /etc/network.conf
9 else
10 . $2
11 fi
13 boot() {
14 # Set hostname.
15 echo -n "Setting hostname..."
16 /bin/hostname -F /etc/hostname
17 status
19 # Configure loopback interface.
20 echo -n "Configuring loopback..."
21 /sbin/ifconfig lo 127.0.0.1 up
22 /sbin/route add 127.0.0.1 lo
23 status
24 }
26 # Use ethernet
27 eth() {
28 ifconfig $INTERFACE up
29 }
31 # For wifi. Users just have to enable it through yes and usually
32 # essid any will work and the interface is autodetected.
33 wifi() {
34 if [ "$WIFI" = "yes" ] || fgrep -q "wifi" /proc/cmdline; then
35 ifconfig $INTERFACE down
37 # Confirm if $WIFI_INTERFACE is the wifi interface
38 if [ ! -d /sys/class/net/$WIFI_INTERFACE/wireless ]; then
39 echo "$WIFI_INTERFACE is not a wifi interface, changing it."
40 WIFI_INTERFACE=$(fgrep : /proc/net/dev | cut -d: -f1 | \
41 while read dev; do iwconfig $dev 2>&1 | \
42 fgrep -iq "essid" && { echo $dev ; break; }; \
43 done)
44 [ -n "$WIFI_INTERFACE" ] && sed -i \
45 "s/^WIFI_INTERFACE=.*/WIFI_INTERFACE=\"$WIFI_INTERFACE\"/" \
46 /etc/network.conf
47 fi
49 echo -n "Configuring $WIFI_INTERFACE..."
50 ifconfig $WIFI_INTERFACE up 2>/dev/null
51 if iwconfig $WIFI_INTERFACE | fgrep -q "Tx-Power"; then
52 iwconfig $WIFI_INTERFACE txpower on
53 fi
54 status
56 [ -n "$WPA_DRIVER" ] || WPA_DRIVER="wext"
57 IWCONFIG_ARGS=""
58 [ -n "$WIFI_MODE" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS mode $WIFI_MODE"
59 [ -n "$WIFI_CHANNEL" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS channel $WIFI_CHANNEL"
60 # unencrypted network
61 if [ "$WIFI_KEY" == "" -o "$WIFI_KEY_TYPE" == "none" ]; then
62 iwconfig $WIFI_INTERFACE essid "$WIFI_ESSID" $IWCONFIG_ARGS
63 fi
64 # encrypted network
65 [ -n "$WIFI_KEY" ] && case "$WIFI_KEY_TYPE" in
66 wep|WEP)
67 #
68 # NOTE (20120303) struggled to connect with WEP key in
69 # cooking but work with 3.0. Busybox/iwconfig seems buggy
70 # but connection work with wpa_supplicant and unquoted
71 # wep_key0
72 #
73 #IWCONFIG_ARGS="$IWCONFIG_ARGS key $WIFI_KEY"
74 #iwconfig $WIFI_INTERFACE essid "$WIFI_ESSID" $IWCONFIG_ARGS
75 #
76 # wpa_supplicant can also deal with wep encryption
77 # Tip: Use unquoted strings for hexadecimal key in wep_key0
78 cat /etc/wpa_supplicant.conf > /tmp/wpa.conf
79 cat >> /tmp/wpa.conf <<EOF
80 ctrl_interface=/var/run/wpa_supplicant
81 ctrl_interface_group=0
82 ap_scan=1
83 network={
84 ssid="$WIFI_ESSID"
85 scan_ssid=1
86 key_mgmt=NONE
87 wep_key0=$WIFI_KEY
88 wep_tx_keyidx=0
89 priority=5
90 }
91 EOF
92 echo "Starting wpa_supplicant for NONE/WEP..."
93 wpa_supplicant -B -W -c/tmp/wpa.conf -D$WPA_DRIVER \
94 -i$WIFI_INTERFACE ;;
95 wpa|WPA)
96 # load pre-configured multiple profiles
97 cat /etc/wpa_supplicant.conf > /tmp/wpa.conf
98 cat >> /tmp/wpa.conf <<EOF
99 ctrl_interface=/var/run/wpa_supplicant
100 ctrl_interface_group=0
101 ap_scan=1
102 network={
103 ssid="$WIFI_ESSID"
104 scan_ssid=1
105 proto=WPA RSN
106 key_mgmt=WPA-PSK WPA-EAP
107 psk="$WIFI_KEY"
108 priority=5
109 }
110 EOF
111 echo "Starting wpa_supplicant for WPA-PSK..."
112 wpa_supplicant -B -W -c/tmp/wpa.conf \
113 -D$WPA_DRIVER -i$WIFI_INTERFACE ;;
114 any|ANY) cat /etc/wpa_supplicant.conf > /tmp/wpa.conf
115 cat >> /tmp/wpa.conf <<EOF
116 ctrl_interface=/var/run/wpa_supplicant
117 ctrl_interface_group=0
118 ap_scan=1
119 network={
120 ssid="$WIFI_ESSID"
121 scan_ssid=1
122 key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
123 group=CCMP TKIP WEP104 WEP40
124 pairwise=CCMP TKIP
125 psk="$WIFI_KEY"
126 priority=5
127 }
128 EOF
129 echo "Starting wpa_supplicant for any key type..."
130 wpa_supplicant -B -W -c/tmp/wpa.conf \
131 -D$WPA_DRIVER -i$WIFI_INTERFACE ;;
132 esac
133 rm -f /tmp/wpa.conf
134 INTERFACE=$WIFI_INTERFACE
135 fi
136 }
138 wpa()
139 {
140 DHCP_SCRIPT="/etc/init.d/wpa_action.sh"
141 wpa_cli -a$DHCP_SCRIPT -B
142 }
144 # For a dynamic IP with DHCP.
145 dhcp() {
146 if [ "$DHCP" = "yes" ] ; then
147 echo "Starting udhcpc client on: $INTERFACE..."
148 # Is wpa wireless && wpa_ctrl_open interface up ?
149 if [ -d /var/run/wpa_supplicant ] && [ "$WIFI" = "yes" ]; then
150 wpa
151 else # fallback on udhcpc: wep, eth
152 /sbin/udhcpc -b -T 1 -A 12 -i $INTERFACE -p \
153 /var/run/udhcpc.$INTERFACE.pid
154 fi
155 fi
156 }
158 # For a static IP.
159 static_ip() {
160 if [ "$STATIC" = "yes" ] ; then
161 echo "Configuring static IP on $INTERFACE: $IP..."
162 /sbin/ifconfig $INTERFACE $IP netmask $NETMASK up
163 /sbin/route add default gateway $GATEWAY
164 # wpa_supplicant waits for wpa_cli
165 [ -d /var/run/wpa_supplicant ] && wpa_cli -B
166 # Multi-DNS server in $DNS_SERVER.
167 /bin/mv /etc/resolv.conf /tmp/resolv.conf.$$
168 for NS in $DNS_SERVER
169 do
170 echo "nameserver $NS" >> /etc/resolv.conf
171 done
172 for HELPER in /etc/ipup.d/*; do
173 [ -x $HELPER ] && $HELPER $INTERFACE $DNS_SERVER
174 done
175 fi
176 }
178 # Stopping everything
179 Stop() {
180 echo "Stopping all interfaces"
181 ifconfig $INTERFACE down
182 ifconfig $WIFI_INTERFACE down
184 echo "Killing all daemons"
185 killall udhcpc
186 killall wpa_supplicant 2>/dev/null
188 if iwconfig $WIFI_INTERFACE | fgrep -q "Tx-Power"; then
189 echo "Shutting down wifi card"
190 iwconfig $WIFI_INTERFACE txpower off
191 fi
192 }
194 Start() {
195 eth
196 wifi
197 dhcp
198 static_ip
199 # change default lxpanel panel iface
200 [ -f /etc/lxpanel/default/panels/panel ] \
201 && sed -i "s/iface=.*/iface=$INTERFACE/" \
202 /etc/lxpanel/default/panels/panel
203 }
205 # looking for arguments:
206 if [ -z "$1" ]; then
207 boot
208 Start
209 else
210 case $1 in
211 start)
212 Start ;;
213 stop)
214 Stop ;;
215 restart)
216 Stop
217 Start ;;
218 *)
219 echo ""
220 echo -e "\033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart]"
221 echo ""
222 echo -e " Default configuration file is \033[1m/etc/network.conf\033[0m"
223 echo -e " You can specify another configuration file in the second argument:"
224 echo -e " \033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart] file.conf"
225 echo "" ;;
226 esac
227 fi