slitaz-boot-scripts rev 188

Improve network.sh with wpa_cli; faster boot
author Rohit Joshi <jozee@slitaz.org>
date Mon Jan 04 16:44:56 2010 +0000 (2010-01-04)
parents c9296cbaaafa
children 3c447e4af92c
files etc/init.d/network.sh etc/init.d/wpa_action.sh
line diff
     1.1 --- a/etc/init.d/network.sh	Tue Dec 22 12:10:13 2009 +0100
     1.2 +++ b/etc/init.d/network.sh	Mon Jan 04 16:44:56 2010 +0000
     1.3 @@ -10,6 +10,7 @@
     1.4  	. $2 
     1.5  fi
     1.6  
     1.7 +
     1.8  Boot() {
     1.9  	# Set hostname.
    1.10  	echo -n "Setting hostname... "
    1.11 @@ -20,7 +21,143 @@
    1.12  	echo -n "Configuring loopback... "
    1.13  	/sbin/ifconfig lo 127.0.0.1 up
    1.14  	/sbin/route add 127.0.0.1 lo
    1.15 -	status
    1.16 +	status	
    1.17 +}
    1.18 +
    1.19 +
    1.20 +eth() {
    1.21 +#  use ethernet
    1.22 +	   	ifconfig $INTERFACE up	
    1.23 +}
    1.24 +
    1.25 +wifi() {
    1.26 +		# For wifi. Users just have to enable it throught yes and usually
    1.27 +	# essid any will work and interface is autodetected.
    1.28 +	if [ "$WIFI" = "yes" ] || grep -q "wifi" /proc/cmdline; then
    1.29 +	    ifconfig $INTERFACE down
    1.30 +		
    1.31 +		# Confirm if $WIFI_INTERFACE is the wifi interface
    1.32 +		if [ ! -d /sys/class/net/$WIFI_INTERFACE/wireless ]; then
    1.33 +			echo "$WIFI_INTERFACE is not a wifi interface, changing it."
    1.34 +			WIFI_INTERFACE=$(grep : /proc/net/dev | cut -d: -f1 | \
    1.35 +				while read dev; do iwconfig $dev 2>&1 | \
    1.36 +					grep -iq "essid" && { echo $dev ; break; }; \
    1.37 +				done)
    1.38 +			[ -n "$WIFI_INTERFACE" ] && sed -i "s/^WIFI_INTERFACE=.*/WIFI_INTERFACE=\"$WIFI_INTERFACE\"/" /etc/network.conf
    1.39 +		fi
    1.40 +		
    1.41 +		echo -n "configuring $WIFI_INTERFACE..."
    1.42 +		ifconfig $WIFI_INTERFACE up
    1.43 +		if iwconfig $WIFI_INTERFACE | grep -q "Tx-Power"; then
    1.44 +			iwconfig $WIFI_INTERFACE txpower on
    1.45 +		fi
    1.46 +		status
    1.47 +		
    1.48 +		[ -n "$WPA_DRIVER" ] || WPA_DRIVER="wext"
    1.49 +		
    1.50 +		
    1.51 +		IWCONFIG_ARGS=""
    1.52 +		[ -n "$WIFI_MODE" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS mode $WIFI_MODE"
    1.53 +		[ -n "$WIFI_CHANNEL" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS channel $WIFI_CHANNEL"
    1.54 +		
    1.55 +		[ -n "$WIFI_KEY" ] && case "$WIFI_KEY_TYPE" in
    1.56 +			wep|WEP) 
    1.57 +			     IWCONFIG_ARGS="$IWCONFIG_ARGS key $WIFI_KEY"
    1.58 +				 iwconfig $WIFI_INTERFACE essid "$WIFI_ESSID" $IWCONFIG_ARGS
    1.59 +# wpa_supplicant can also deal with wep encryption but iwconfig is preferred
    1.60 +# Tip:Use unquoted strings for hexadecimal key in wep_key0
    1.61 +#			cat /etc/wpa_supplicant.conf > /tmp/wpa.conf 
    1.62 +#			cat >> /tmp/wpa.conf <<EOF
    1.63 +#ctrl_interface=/var/run/wpa_supplicant
    1.64 +#ctrl_interface_group=0
    1.65 +#ap_scan=1
    1.66 +#network={
    1.67 +#	ssid="$WIFI_ESSID"
    1.68 +#	scan_ssid=1
    1.69 +#	key_mgmt=NONE
    1.70 +#	wep_key0="$WIFI_KEY"
    1.71 +#	wep_tx_keyidx=0
    1.72 +#	priority=5
    1.73 +#}
    1.74 +#EOF
    1.75 +				    ;;
    1.76 +			wpa|WPA) cat /etc/wpa_supplicant.conf > /tmp/wpa.conf # load pre-configured multiple profiles 
    1.77 +			cat >> /tmp/wpa.conf <<EOF
    1.78 +ctrl_interface=/var/run/wpa_supplicant
    1.79 +ctrl_interface_group=0
    1.80 +ap_scan=1
    1.81 +network={
    1.82 +	ssid="$WIFI_ESSID"
    1.83 +	scan_ssid=1
    1.84 +	proto=WPA
    1.85 +	key_mgmt=WPA-PSK
    1.86 +	psk="$WIFI_KEY"
    1.87 +	priority=5
    1.88 +}
    1.89 +EOF
    1.90 +				echo "starting wpa_supplicant, for WPA-PSK"
    1.91 +				wpa_supplicant -B -W -c/tmp/wpa.conf -D$WPA_DRIVER -i$WIFI_INTERFACE 
    1.92 +				;;
    1.93 +			any|ANY) cat /etc/wpa_supplicant.conf > /tmp/wpa.conf 
    1.94 +			cat >> /tmp/wpa.conf <<EOF
    1.95 +ctrl_interface=/var/run/wpa_supplicant
    1.96 +ctrl_interface_group=0
    1.97 +ap_scan=1
    1.98 +network={
    1.99 +	ssid="$WIFI_ESSID"
   1.100 +	scan_ssid=1
   1.101 +	key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
   1.102 +	group=CCMP TKIP WEP104 WEP40
   1.103 +	pairwise=CCMP TKIP
   1.104 +	psk="$WIFI_KEY"
   1.105 +	priority=5
   1.106 +}
   1.107 +EOF
   1.108 +				echo "starting wpa_supplicant for any key type"
   1.109 +				wpa_supplicant -B -W -c/tmp/wpa.conf -D$WPA_DRIVER -i$WIFI_INTERFACE 
   1.110 +				;;
   1.111 +		esac
   1.112 +		
   1.113 +		rm -f /tmp/wpa.conf
   1.114 +		
   1.115 +		INTERFACE=$WIFI_INTERFACE			
   1.116 +	fi
   1.117 +
   1.118 +}
   1.119 +
   1.120 +wpa()
   1.121 +{
   1.122 +	DHCP_SCRIPT="/etc/init.d/wpa_action.sh"
   1.123 +	wpa_cli -a$DHCP_SCRIPT -B 
   1.124 +}
   1.125 +
   1.126 +dhcp() {
   1.127 +
   1.128 +# For a dynamic IP with DHCP. 
   1.129 +	if [ "$DHCP" = "yes" ]  ; then
   1.130 +		echo "Starting udhcpc client on: $INTERFACE... "		
   1.131 +		if [ -d /var/run/wpa_supplicant ]; then # wpa wireless && wpa_ctrl_open interface is up
   1.132 +		   wpa		  
   1.133 +		else  # fallback on udhcpc: wep, eth
   1.134 +		   /sbin/udhcpc -b -T 1 -A 12 -i $INTERFACE -p /var/run/udhcpc.$INTERFACE.pid
   1.135 +		fi		
   1.136 +	fi
   1.137 +	
   1.138 +}
   1.139 +
   1.140 +static_ip() {
   1.141 +# For a static IP.
   1.142 +	if [ "$STATIC" = "yes" ] ; then
   1.143 +		echo "Configuring static IP on $INTERFACE: $IP... "
   1.144 +		/sbin/ifconfig $INTERFACE $IP netmask $NETMASK up
   1.145 +		/sbin/route add default gateway $GATEWAY
   1.146 +		# Multi-DNS server in $DNS_SERVER.
   1.147 +		/bin/mv /etc/resolv.conf /tmp/resolv.conf.$$
   1.148 +		for NS in $DNS_SERVER
   1.149 +		do
   1.150 +			echo "nameserver $NS" >> /etc/resolv.conf
   1.151 +		done
   1.152 +	fi
   1.153  }
   1.154  
   1.155  # Stopping everything
   1.156 @@ -40,101 +177,26 @@
   1.157  }
   1.158  
   1.159  Start() {
   1.160 -	# For wifi. Users just have to enable it through yes and usually
   1.161 -	# essid any will work and interface is autodetected.
   1.162 -	if [ "$WIFI" = "yes" ] || grep -q "wifi" /proc/cmdline; then
   1.163 -		if [ ! -d /sys/class/net/$WIFI_INTERFACE/wireless ]; then
   1.164 -			echo "$WIFI_INTERFACE is not a wifi interface, changing it."
   1.165 -			WIFI_INTERFACE=$(grep : /proc/net/dev | cut -d: -f1 | \
   1.166 -				while read dev; do iwconfig $dev 2>&1 | \
   1.167 -					grep -iq "essid" && { echo $dev ; break; }; \
   1.168 -				done)
   1.169 -			[ -n "$WIFI_INTERFACE" ] && sed -i "s/^WIFI_INTERFACE=.*/WIFI_INTERFACE=\"$WIFI_INTERFACE\"/" /etc/network.conf
   1.170 -		fi
   1.171 -		[ -n "$WPA_DRIVER" ] || WPA_DRIVER="wext"
   1.172 -		IWCONFIG_ARGS=""
   1.173 -		[ -n "$WIFI_MODE" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS mode $WIFI_MODE"
   1.174 -		[ -n "$WIFI_KEY" ] && case "$WIFI_KEY_TYPE" in
   1.175 -			wep|WEP) IWCONFIG_ARGS="$IWCONFIG_ARGS key $WIFI_KEY";;
   1.176 -			wpa|WPA) cat > /tmp/wpa.conf <<EOF
   1.177 -ap_scan=1
   1.178 -network={
   1.179 -	ssid="$WIFI_ESSID"
   1.180 -	scan_ssid=1
   1.181 -	proto=WPA
   1.182 -	key_mgmt=WPA-PSK
   1.183 -	psk="$WIFI_KEY"
   1.184 -	priority=5
   1.185 -}
   1.186 -EOF
   1.187 -				echo "Starting wpa_supplicant for WPA-PSK"
   1.188 -				wpa_supplicant -B -c/tmp/wpa.conf -D$WPA_DRIVER -i$WIFI_INTERFACE
   1.189 -				;;
   1.190 -			any|ANY) cat > /tmp/wpa.conf <<EOF
   1.191 -ap_scan=1
   1.192 -network={
   1.193 -	ssid="$WIFI_ESSID"
   1.194 -	scan_ssid=1
   1.195 -	key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
   1.196 -	group=CCMP TKIP WEP104 WEP40
   1.197 -	pairwise=CCMP TKIP
   1.198 -	psk="$WIFI_KEY"
   1.199 -	priority=5
   1.200 -}
   1.201 -EOF
   1.202 -				echo "Starting wpa_supplicant for any key type"
   1.203 -				wpa_supplicant -B -c/tmp/wpa.conf -D$WPA_DRIVER -i$WIFI_INTERFACE
   1.204 -				;;
   1.205 -		esac
   1.206 -		rm -f /tmp/wpa.conf
   1.207 -		[ -n "$WIFI_CHANNEL" ] && IWCONFIG_ARGS="$IWCONFIG_ARGS channel $WIFI_CHANNEL"
   1.208 -		echo -n "Configuring $WIFI_INTERFACE..."
   1.209 -		ifconfig $WIFI_INTERFACE up
   1.210 -		if iwconfig $WIFI_INTERFACE | grep -q "Tx-Power"; then
   1.211 -			iwconfig $WIFI_INTERFACE txpower on
   1.212 -		fi
   1.213 -		iwconfig $WIFI_INTERFACE essid "$WIFI_ESSID" $IWCONFIG_ARGS
   1.214 -		status
   1.215 -		INTERFACE=$WIFI_INTERFACE
   1.216 -	fi
   1.217 -
   1.218 -	# For a dynamic IP with DHCP.
   1.219 -	if [ "$DHCP" = "yes" ] ; then
   1.220 -		echo "Starting udhcpc client on: $INTERFACE... "
   1.221 -		/sbin/udhcpc -b -T 1 -A 12 -i $INTERFACE -p /var/run/udhcpc.$INTERFACE.pid
   1.222 -	fi
   1.223 -
   1.224 -	# For a static IP.
   1.225 -	if [ "$STATIC" = "yes" ] ; then
   1.226 -		echo "Configuring static IP on $INTERFACE: $IP... "
   1.227 -		/sbin/ifconfig $INTERFACE $IP netmask $NETMASK up
   1.228 -		/sbin/route add default gateway $GATEWAY
   1.229 -		# Multi-DNS server in $DNS_SERVER.
   1.230 -		/bin/mv /etc/resolv.conf /tmp/resolv.conf.$$
   1.231 -		for NS in $DNS_SERVER
   1.232 -		do
   1.233 -			echo "nameserver $NS" >> /etc/resolv.conf
   1.234 -		done
   1.235 -	fi
   1.236 +   eth
   1.237 +   wifi
   1.238 +   dhcp 
   1.239 +   static_ip	
   1.240  }
   1.241  
   1.242  
   1.243 -# Looking for arguments:
   1.244 +# looking for arguments:
   1.245  if [ -z "$1" ]; then
   1.246  	Boot
   1.247  	Start
   1.248  else
   1.249  	case $1 in
   1.250  		start)
   1.251 -			Start
   1.252 -		;;
   1.253 +			Start ;;
   1.254  		stop)
   1.255 -			Stop
   1.256 -		;;
   1.257 +			Stop ;;
   1.258  		restart)
   1.259  			Stop
   1.260 -			Start
   1.261 -		;;
   1.262 +			Start ;;
   1.263  		*)
   1.264  			echo ""
   1.265  			echo -e "\033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart]"
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/etc/init.d/wpa_action.sh	Mon Jan 04 16:44:56 2010 +0000
     2.3 @@ -0,0 +1,11 @@
     2.4 +#!/bin/sh
     2.5 +INTERFACE=$1
     2.6 + 
     2.7 +# For a dynamic IP with DHCP.
     2.8 +if [ "$2" = "CONNECTED" ]; then
     2.9 +     [ -f /var/run/udhcpc.$INTERFACE.pid] && killall udhcpc 
    2.10 +	/sbin/udhcpc -b -i $INTERFACE -p /var/run/udhcpc.$INTERFACE.pid
    2.11 +elif [ "$2" = "DISCONNECTED" ]; then
    2.12 +   	/sbin/udhcpc -b -i $INTERFACE -p /var/run/udhcpc.$INTERFACE.pid
    2.13 +fi
    2.14 +