Home | History | Annotate | Line # | Download | only in hooks
10-wpa_supplicant revision 1.1.1.2.4.1
      1          1.1     roy # Start, reconfigure and stop wpa_supplicant per wireless interface.
      2  1.1.1.2.4.1  martin #
      3  1.1.1.2.4.1  martin # This is only needed when using wpa_supplicant-2.5 or older, OR
      4  1.1.1.2.4.1  martin # when wpa_supplicant has not been built with CONFIG_MATCH_IFACE, OR
      5  1.1.1.2.4.1  martin # wpa_supplicant was launched without the -M flag to activate
      6  1.1.1.2.4.1  martin # interface matching.
      7          1.1     roy 
      8          1.1     roy if [ -z "$wpa_supplicant_conf" ]; then
      9          1.1     roy 	for x in \
     10          1.1     roy 		/etc/wpa_supplicant/wpa_supplicant-"$interface".conf \
     11          1.1     roy 		/etc/wpa_supplicant/wpa_supplicant.conf \
     12          1.1     roy 		/etc/wpa_supplicant-"$interface".conf \
     13          1.1     roy 		/etc/wpa_supplicant.conf \
     14          1.1     roy 	; do
     15          1.1     roy 		if [ -s "$x" ]; then
     16          1.1     roy 			wpa_supplicant_conf="$x"
     17          1.1     roy 			break
     18          1.1     roy 		fi
     19          1.1     roy 	done
     20          1.1     roy fi
     21          1.1     roy : ${wpa_supplicant_conf:=/etc/wpa_supplicant.conf}
     22          1.1     roy 
     23          1.1     roy wpa_supplicant_ctrldir()
     24          1.1     roy {
     25          1.1     roy 	dir=$(key_get_value "[[:space:]]*ctrl_interface=" \
     26          1.1     roy 		"$wpa_supplicant_conf")
     27          1.1     roy 	dir=$(trim "$dir")
     28          1.1     roy 	case "$dir" in
     29          1.1     roy 	DIR=*)
     30          1.1     roy 		dir=${dir##DIR=}
     31          1.1     roy 		dir=${dir%%[[:space:]]GROUP=*}
     32          1.1     roy 		dir=$(trim "$dir")
     33          1.1     roy 		;;
     34          1.1     roy 	esac
     35          1.1     roy 	printf %s "$dir"
     36          1.1     roy }
     37          1.1     roy 
     38          1.1     roy wpa_supplicant_start()
     39          1.1     roy {
     40          1.1     roy 	# If the carrier is up, don't bother checking anything
     41          1.1     roy 	[ "$ifcarrier" = "up" ] && return 0
     42          1.1     roy 
     43          1.1     roy 	# Pre flight checks
     44          1.1     roy 	if [ ! -s "$wpa_supplicant_conf" ]; then
     45          1.1     roy 		syslog warn \
     46          1.1     roy 			"$wpa_supplicant_conf does not exist"
     47          1.1     roy 		syslog warn "not interacting with wpa_supplicant(8)"
     48          1.1     roy 		return 1
     49          1.1     roy 	fi
     50          1.1     roy 	dir=$(wpa_supplicant_ctrldir)
     51          1.1     roy 	if [ -z "$dir" ]; then
     52          1.1     roy 		syslog warn \
     53          1.1     roy 			"ctrl_interface not defined in $wpa_supplicant_conf"
     54          1.1     roy 		syslog warn "not interacting with wpa_supplicant(8)"
     55          1.1     roy 		return 1
     56          1.1     roy 	fi
     57          1.1     roy 
     58          1.1     roy 	wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 && return 0
     59          1.1     roy 	syslog info "starting wpa_supplicant"
     60          1.1     roy 	driver=${wpa_supplicant_driver:+-D}$wpa_supplicant_driver
     61          1.1     roy 	err=$(wpa_supplicant -B -c"$wpa_supplicant_conf" -i"$interface" \
     62          1.1     roy 	    "$driver" 2>&1)
     63          1.1     roy 	errn=$?
     64          1.1     roy 	if [ $errn != 0 ]; then
     65          1.1     roy 		syslog err "failed to start wpa_supplicant"
     66          1.1     roy 		syslog err "$err"
     67          1.1     roy 	fi
     68          1.1     roy 	return $errn
     69          1.1     roy }
     70          1.1     roy 
     71          1.1     roy wpa_supplicant_reconfigure()
     72          1.1     roy {
     73          1.1     roy 	dir=$(wpa_supplicant_ctrldir)
     74          1.1     roy 	[ -z "$dir" ] && return 1
     75          1.1     roy 	if ! wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1; then
     76          1.1     roy 		wpa_supplicant_start
     77          1.1     roy 		return $?
     78          1.1     roy 	fi
     79          1.1     roy 	syslog info "reconfiguring wpa_supplicant"
     80          1.1     roy 	err=$(wpa_cli -p "$dir" -i "$interface" reconfigure 2>&1)
     81          1.1     roy 	errn=$?
     82          1.1     roy 	if [ $errn != 0 ]; then
     83          1.1     roy 		syslog err "failed to reconfigure wpa_supplicant"
     84          1.1     roy 		syslog err "$err"
     85          1.1     roy 	fi
     86          1.1     roy 	return $errn
     87          1.1     roy }
     88          1.1     roy 
     89          1.1     roy wpa_supplicant_stop()
     90          1.1     roy {
     91          1.1     roy 	dir=$(wpa_supplicant_ctrldir)
     92          1.1     roy 	[ -z "$dir" ] && return 1
     93          1.1     roy 	wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 || return 0
     94          1.1     roy 	syslog info "stopping wpa_supplicant"
     95          1.1     roy 	err=$(wpa_cli -i"$interface" terminate 2>&1)
     96          1.1     roy 	errn=$?
     97          1.1     roy 	if [ $errn != 0 ]; then
     98  1.1.1.2.4.1  martin 		syslog err "failed to stop wpa_supplicant"
     99          1.1     roy 		syslog err "$err"
    100          1.1     roy 	fi
    101          1.1     roy 	return $errn
    102          1.1     roy }
    103          1.1     roy 
    104          1.1     roy if [ "$ifwireless" = "1" ] && \
    105          1.1     roy     type wpa_supplicant >/dev/null 2>&1 && \
    106          1.1     roy     type wpa_cli >/dev/null 2>&1
    107          1.1     roy then
    108          1.1     roy 	case "$reason" in
    109          1.1     roy 	PREINIT)	wpa_supplicant_start;;
    110          1.1     roy 	RECONFIGURE)	wpa_supplicant_reconfigure;;
    111          1.1     roy 	DEPARTED)	wpa_supplicant_stop;;
    112          1.1     roy 	esac
    113          1.1     roy fi
    114