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

network.sh: add static helper support (like dhcp)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue May 31 18:14:34 2011 +0200 (2011-05-31)
parents 8b16caf41633
children befbf0dc7341
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" ] || grep -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=$(grep : /proc/net/dev | cut -d: -f1 | \
41 while read dev; do iwconfig $dev 2>&1 | \
42 grep -iq "essid" && { echo $dev ; break; }; \
43 done)
44 [ -n "$WIFI_INTERFACE" ] && sed -i "s/^WIFI_INTERFACE=.*/WIFI_INTERFACE=\"$WIFI_INTERFACE\"/" /etc/network.conf
45 fi
47 echo -n "Configuring $WIFI_INTERFACE..."
48 ifconfig $WIFI_INTERFACE up
49 if iwconfig $WIFI_INTERFACE | grep -q "Tx-Power"; then
50 iwconfig $WIFI_INTERFACE txpower on
51 fi
52 status
54 [ -n "$WPA_DRIVER" ] || WPA_DRIVER="wext"
55 IWCONFIG_ARGS=""
56 [ -n "$WIFI_MODE" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS mode $WIFI_MODE"
57 [ -n "$WIFI_CHANNEL" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS channel $WIFI_CHANNEL"
58 # unencrypted network
59 if [ "$WIFI_KEY" == "" -o "$WIFI_KEY_TYPE" == "none" ]; then
60 iwconfig $WIFI_INTERFACE essid "$WIFI_ESSID" $IWCONFIG_ARGS
61 fi
62 # encrypted network
63 [ -n "$WIFI_KEY" ] && case "$WIFI_KEY_TYPE" in
64 wep|WEP)
65 IWCONFIG_ARGS="$IWCONFIG_ARGS key $WIFI_KEY"
66 iwconfig $WIFI_INTERFACE essid "$WIFI_ESSID" $IWCONFIG_ARGS
67 # wpa_supplicant can also deal with wep encryption but iwconfig is preferred
68 # Tip: Use unquoted strings for hexadecimal key in wep_key0
69 # cat /etc/wpa_supplicant.conf > /tmp/wpa.conf
70 # cat >> /tmp/wpa.conf <<EOF
71 #ctrl_interface=/var/run/wpa_supplicant
72 #ctrl_interface_group=0
73 #ap_scan=1
74 #network={
75 # ssid="$WIFI_ESSID"
76 # scan_ssid=1
77 # key_mgmt=NONE
78 # wep_key0="$WIFI_KEY"
79 # wep_tx_keyidx=0
80 # priority=5
81 #}
82 #EOF
83 # echo "Starting wpa_supplicant for NONE/WEP..."
84 # wpa_supplicant -B -W -c/tmp/wpa.conf -D$WPA_DRIVER -i$WIFI_INTERFACE
85 ;;
86 wpa|WPA)
87 # load pre-configured multiple profiles
88 cat /etc/wpa_supplicant.conf > /tmp/wpa.conf
89 cat >> /tmp/wpa.conf <<EOF
90 ctrl_interface=/var/run/wpa_supplicant
91 ctrl_interface_group=0
92 ap_scan=1
93 network={
94 ssid="$WIFI_ESSID"
95 scan_ssid=1
96 proto=WPA RSN
97 key_mgmt=WPA-PSK WPA-EAP
98 psk="$WIFI_KEY"
99 priority=5
100 }
101 EOF
102 echo "Starting wpa_supplicant for WPA-PSK..."
103 wpa_supplicant -B -W -c/tmp/wpa.conf \
104 -D$WPA_DRIVER -i$WIFI_INTERFACE ;;
105 any|ANY) cat /etc/wpa_supplicant.conf > /tmp/wpa.conf
106 cat >> /tmp/wpa.conf <<EOF
107 ctrl_interface=/var/run/wpa_supplicant
108 ctrl_interface_group=0
109 ap_scan=1
110 network={
111 ssid="$WIFI_ESSID"
112 scan_ssid=1
113 key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
114 group=CCMP TKIP WEP104 WEP40
115 pairwise=CCMP TKIP
116 psk="$WIFI_KEY"
117 priority=5
118 }
119 EOF
120 echo "Starting wpa_supplicant for any key type..."
121 wpa_supplicant -B -W -c/tmp/wpa.conf \
122 -D$WPA_DRIVER -i$WIFI_INTERFACE ;;
123 esac
124 rm -f /tmp/wpa.conf
125 INTERFACE=$WIFI_INTERFACE
126 fi
127 }
129 wpa()
130 {
131 DHCP_SCRIPT="/etc/init.d/wpa_action.sh"
132 wpa_cli -a$DHCP_SCRIPT -B
133 }
135 # For a dynamic IP with DHCP.
136 dhcp() {
137 if [ "$DHCP" = "yes" ] ; then
138 echo "Starting udhcpc client on: $INTERFACE..."
139 # Is wpa wireless && wpa_ctrl_open interface up ?
140 if [ -d /var/run/wpa_supplicant ] && [ "$WIFI" = "yes" ]; then
141 wpa
142 else # fallback on udhcpc: wep, eth
143 /sbin/udhcpc -b -T 1 -A 12 -i $INTERFACE -p \
144 /var/run/udhcpc.$INTERFACE.pid
145 fi
146 fi
147 }
149 # For a static IP.
150 static_ip() {
151 if [ "$STATIC" = "yes" ] ; then
152 echo "Configuring static IP on $INTERFACE: $IP..."
153 /sbin/ifconfig $INTERFACE $IP netmask $NETMASK up
154 /sbin/route add default gateway $GATEWAY
155 # wpa_supplicant waits for wpa_cli
156 [ -d /var/run/wpa_supplicant ] && wpa_cli -B
157 # Multi-DNS server in $DNS_SERVER.
158 /bin/mv /etc/resolv.conf /tmp/resolv.conf.$$
159 for NS in $DNS_SERVER
160 do
161 echo "nameserver $NS" >> /etc/resolv.conf
162 done
163 for HELPER in /etc/ipup.d/*; do
164 [ -x $HELPER ] && $HELPER $INTERFACE $DNS_SERVER
165 done
166 fi
167 }
169 # Stopping everything
170 Stop() {
171 echo "Stopping all interfaces"
172 ifconfig $INTERFACE down
173 ifconfig $WIFI_INTERFACE down
175 echo "Killing all daemons"
176 killall udhcpc
177 killall wpa_supplicant 2>/dev/null
179 if iwconfig $WIFI_INTERFACE | grep -q "Tx-Power"; then
180 echo "Shutting down wifi card"
181 iwconfig $WIFI_INTERFACE txpower off
182 fi
183 }
185 Start() {
186 eth
187 wifi
188 dhcp
189 static_ip
190 # change default lxpanel panel iface
191 [ -f /etc/lxpanel/default/panels/panel ] \
192 && sed -i "s/iface=.*/iface=$INTERFACE/" \
193 /etc/lxpanel/default/panels/panel
194 }
196 # looking for arguments:
197 if [ -z "$1" ]; then
198 boot
199 Start
200 else
201 case $1 in
202 start)
203 Start ;;
204 stop)
205 Stop ;;
206 restart)
207 Stop
208 Start ;;
209 *)
210 echo ""
211 echo -e "\033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart]"
212 echo ""
213 echo -e " Default configuration file is \033[1m/etc/network.conf\033[0m"
214 echo -e " You can specify another configuration file in the second argument:"
215 echo -e " \033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart] file.conf"
216 echo "" ;;
217 esac
218 fi