[OE-core] [PATCH] wpa-supplicant.sh: updated to modern init script format, refactoring, and new restart functionality

Andrew Wichmann awichmann at emacinc.com
Mon Feb 29 17:49:43 UTC 2016


Refactored the script by placing the logic of starting and stopping into separate functions,
added a switch statement to act on $1, then refactored multiple if statements into one line tests.
Check_socket function was extracted to increase the readability of the start function.
Created restart functionality by calling stop then start
Added a BEGIN INIT INFO comment section (should be verified for accuracy)
Sourced the rcS default file to use the VERBOSE variable instead of VERBOSITY
Defined WPA_COMMON_CTRL_IFACE = "/var/run/wpa_supplicant" that was previously acted upon but not defined.

Signed-off-by: Andrew Wichmann <awichmann at emacinc.com>
---
 .../wpa-supplicant/wpa-supplicant.sh               | 91 +++++++++++++---------
 1 file changed, 54 insertions(+), 37 deletions(-)

diff --git a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh
index 5c9e5d3..3623cbe 100644
--- a/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh
+++ b/meta/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh
@@ -1,72 +1,62 @@
-#!/bin/sh
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides:			wpa_supplicant
+# Required-Start:	$local_fs
+# Required-Stop:	$local_fs
+# Default-Start:	2 3 4 5
+# Default-Stop:		0 1 6
+# Short-Description: A script to start, stop, or restart the wpa_supplicant daemon.
+### END INIT INFO
 
 
+IFACE="wlan0"
 WPA_SUP_BIN="/usr/sbin/wpa_supplicant"
 WPA_SUP_PNAME="wpa_supplicant"
 WPA_SUP_PIDFILE="/var/run/wpa_supplicant.$IFACE.pid"
 WPA_SUP_OPTIONS="-B -P $WPA_SUP_PIDFILE -i $IFACE"
+WPA_COMMON_CTRL_IFACE="/var/run/wpa_supplicant"
+IF_WPA_CONF="/etc/wpa_supplicant.conf"
 
-VERBOSITY=0
 
+[ -s "/etc/default/rcS" ] && . "/etc/default/rcS"
 
-if [ -s "$IF_WPA_CONF" ]; then
-	WPA_SUP_CONF="-c $IF_WPA_CONF"
-else
-	exit 0
-fi
+[ ! -s "$IF_WPA_CONF" ] && exit 0
+WPA_SUP_CONF="-c $IF_WPA_CONF"
 
 if [ ! -x "$WPA_SUP_BIN" ]; then
 	
-	if [ "$VERBOSITY" = "1" ]; then
-		echo "$WPA_SUP_PNAME: binaries not executable or missing from $WPA_SUP_BIN"
-	fi
+	[ "$VERBOSE" = "yes" ] && echo "$WPA_SUP_PNAME: binaries not executable or missing from $WPA_SUP_BIN"
 	
 	exit 1
 fi
 
-if [ "$MODE" = "start" ] ; then
+start() {
 	# driver type of interface, defaults to wext when undefined
 	if [ -s "/etc/wpa_supplicant/driver.$IFACE" ]; then
 		IF_WPA_DRIVER=$(cat "/etc/wpa_supplicant/driver.$IFACE")
 	elif [ -z "$IF_WPA_DRIVER" ]; then
 		
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: wpa-driver not provided, using \"wext\""
-		fi
-		
+		[ "$VERBOSE" = "yes" ] && echo "$WPA_SUP_PNAME: wpa-driver not provided, using \"wext\""
+	
 		IF_WPA_DRIVER="wext"
 	fi
 	
 	# if we have passed the criteria, start wpa_supplicant
 	if [ -n "$WPA_SUP_CONF" ]; then
 		
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: $WPA_SUP_BIN $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER"
-		fi
-		
+		[ "$VERBOSE" = "yes" ] && echo "$WPA_SUP_PNAME: $WPA_SUP_BIN $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER"
+
 		start-stop-daemon --start --quiet \
 			--name $WPA_SUP_PNAME --startas $WPA_SUP_BIN --pidfile $WPA_SUP_PIDFILE \
 			--  $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER
 	fi
+	check_socket
+}
 
-	# if the interface socket exists, then wpa_supplicant was invoked successfully
-	if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]; then
-	
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: ctrl_interface socket located at $WPA_COMMON_CTRL_IFACE/$IFACE"
-		fi
-
-		exit 0
-		
-	fi
-	
-elif [ "$MODE" = "stop" ]; then
-
+stop() {
 	if [ -f "$WPA_SUP_PIDFILE" ]; then
 		
-		if [ "$VERBOSITY" = "1" ]; then
-			echo "$WPA_SUP_PNAME: terminating $WPA_SUP_PNAME daemon"
-		fi
+		[ "$VERBOSE" = "yes" ] && echo "$WPA_SUP_PNAME: terminating $WPA_SUP_PNAME daemon"
 		
 		start-stop-daemon --stop --quiet \
 			--name $WPA_SUP_PNAME --pidfile	$WPA_SUP_PIDFILE
@@ -79,7 +69,34 @@ elif [ "$MODE" = "stop" ]; then
 			rm -f $WPA_SUP_PIDFILE
 		fi
 	fi
+	exit 0
+}
 
-fi
+check_socket(){
+	# if the interface socket exists, then wpa_supplicant was invoked successfully
+	if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]
+	then
+		[ "$VERBOSE" = "yes" ] && echo "$WPA_SUP_PNAME: ctrl_interface socket located at$WPA_COMMON_CTRL_IFACE/$IFACE"
+		exit 0
+	fi
+	exit 1
+}
+
+case "$1" in
+	start)
+		start
+		;;
+	stop)
+		stop
+		;;
+	restart)
+		stop
+		start
+		;;
+	*)
+		echo "Usage: /etc/init.d/wpa_supplicant {start|stop|restart}"
+		exit 1
+
+esac
 
-exit 0
+exit 1
-- 
1.9.1




More information about the Openembedded-core mailing list