Home | History | Annotate | Line # | Download | only in hooks
10-wpa_supplicant revision 1.1.1.5
      1      1.1  roy # Start, reconfigure and stop wpa_supplicant per wireless interface.
      2  1.1.1.4  roy #
      3  1.1.1.4  roy # This is only needed when using wpa_supplicant-2.5 or older, OR
      4  1.1.1.4  roy # when wpa_supplicant has not been built with CONFIG_MATCH_IFACE, OR
      5  1.1.1.4  roy # wpa_supplicant was launched without the -M flag to activate
      6  1.1.1.4  roy # 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.3  roy 		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.1.5  roy     command -v wpa_supplicant >/dev/null 2>&1 && \
    106  1.1.1.5  roy     command -v 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