14e3ebfccSroy# Start, reconfigure and stop wpa_supplicant per wireless interface. 25ebc262aSroy# 35ebc262aSroy# This is only needed when using wpa_supplicant-2.5 or older, OR 45ebc262aSroy# when wpa_supplicant has not been built with CONFIG_MATCH_IFACE, OR 55ebc262aSroy# wpa_supplicant was launched without the -M flag to activate 65ebc262aSroy# interface matching. 74e3ebfccSroy 84e3ebfccSroyif [ -z "$wpa_supplicant_conf" ]; then 94e3ebfccSroy for x in \ 104e3ebfccSroy /etc/wpa_supplicant/wpa_supplicant-"$interface".conf \ 114e3ebfccSroy /etc/wpa_supplicant/wpa_supplicant.conf \ 124e3ebfccSroy /etc/wpa_supplicant-"$interface".conf \ 134e3ebfccSroy /etc/wpa_supplicant.conf \ 144e3ebfccSroy ; do 154e3ebfccSroy if [ -s "$x" ]; then 164e3ebfccSroy wpa_supplicant_conf="$x" 174e3ebfccSroy break 184e3ebfccSroy fi 194e3ebfccSroy done 204e3ebfccSroyfi 214e3ebfccSroy: ${wpa_supplicant_conf:=/etc/wpa_supplicant.conf} 224e3ebfccSroy 234e3ebfccSroywpa_supplicant_ctrldir() 244e3ebfccSroy{ 254e3ebfccSroy dir=$(key_get_value "[[:space:]]*ctrl_interface=" \ 264e3ebfccSroy "$wpa_supplicant_conf") 274e3ebfccSroy dir=$(trim "$dir") 284e3ebfccSroy case "$dir" in 294e3ebfccSroy DIR=*) 304e3ebfccSroy dir=${dir##DIR=} 314e3ebfccSroy dir=${dir%%[[:space:]]GROUP=*} 324e3ebfccSroy dir=$(trim "$dir") 334e3ebfccSroy ;; 344e3ebfccSroy esac 354e3ebfccSroy printf %s "$dir" 364e3ebfccSroy} 374e3ebfccSroy 384e3ebfccSroywpa_supplicant_start() 394e3ebfccSroy{ 404e3ebfccSroy # If the carrier is up, don't bother checking anything 414e3ebfccSroy [ "$ifcarrier" = "up" ] && return 0 424e3ebfccSroy 434e3ebfccSroy # Pre flight checks 444e3ebfccSroy if [ ! -s "$wpa_supplicant_conf" ]; then 454e3ebfccSroy syslog warn \ 464e3ebfccSroy "$wpa_supplicant_conf does not exist" 474e3ebfccSroy syslog warn "not interacting with wpa_supplicant(8)" 484e3ebfccSroy return 1 494e3ebfccSroy fi 504e3ebfccSroy dir=$(wpa_supplicant_ctrldir) 514e3ebfccSroy if [ -z "$dir" ]; then 524e3ebfccSroy syslog warn \ 534e3ebfccSroy "ctrl_interface not defined in $wpa_supplicant_conf" 544e3ebfccSroy syslog warn "not interacting with wpa_supplicant(8)" 554e3ebfccSroy return 1 564e3ebfccSroy fi 574e3ebfccSroy 584e3ebfccSroy wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 && return 0 594e3ebfccSroy syslog info "starting wpa_supplicant" 604e3ebfccSroy driver=${wpa_supplicant_driver:+-D}$wpa_supplicant_driver 614e3ebfccSroy err=$(wpa_supplicant -B -c"$wpa_supplicant_conf" -i"$interface" \ 624e3ebfccSroy "$driver" 2>&1) 634e3ebfccSroy errn=$? 644e3ebfccSroy if [ $errn != 0 ]; then 654e3ebfccSroy syslog err "failed to start wpa_supplicant" 664e3ebfccSroy syslog err "$err" 674e3ebfccSroy fi 684e3ebfccSroy return $errn 694e3ebfccSroy} 704e3ebfccSroy 714e3ebfccSroywpa_supplicant_reconfigure() 724e3ebfccSroy{ 734e3ebfccSroy dir=$(wpa_supplicant_ctrldir) 744e3ebfccSroy [ -z "$dir" ] && return 1 754e3ebfccSroy if ! wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1; then 764e3ebfccSroy wpa_supplicant_start 774e3ebfccSroy return $? 784e3ebfccSroy fi 794e3ebfccSroy syslog info "reconfiguring wpa_supplicant" 804e3ebfccSroy err=$(wpa_cli -p "$dir" -i "$interface" reconfigure 2>&1) 814e3ebfccSroy errn=$? 824e3ebfccSroy if [ $errn != 0 ]; then 834e3ebfccSroy syslog err "failed to reconfigure wpa_supplicant" 844e3ebfccSroy syslog err "$err" 854e3ebfccSroy fi 864e3ebfccSroy return $errn 874e3ebfccSroy} 884e3ebfccSroy 894e3ebfccSroywpa_supplicant_stop() 904e3ebfccSroy{ 914e3ebfccSroy dir=$(wpa_supplicant_ctrldir) 924e3ebfccSroy [ -z "$dir" ] && return 1 934e3ebfccSroy wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 || return 0 944e3ebfccSroy syslog info "stopping wpa_supplicant" 954e3ebfccSroy err=$(wpa_cli -i"$interface" terminate 2>&1) 964e3ebfccSroy errn=$? 974e3ebfccSroy if [ $errn != 0 ]; then 980d34b412Sroy syslog err "failed to stop wpa_supplicant" 994e3ebfccSroy syslog err "$err" 1004e3ebfccSroy fi 1014e3ebfccSroy return $errn 1024e3ebfccSroy} 1034e3ebfccSroy 1044e3ebfccSroyif [ "$ifwireless" = "1" ] && \ 105*3ee74c9aSroy command -v wpa_supplicant >/dev/null 2>&1 && \ 106*3ee74c9aSroy command -v wpa_cli >/dev/null 2>&1 1074e3ebfccSroythen 1084e3ebfccSroy case "$reason" in 1094e3ebfccSroy PREINIT) wpa_supplicant_start;; 1104e3ebfccSroy RECONFIGURE) wpa_supplicant_reconfigure;; 1114e3ebfccSroy DEPARTED) wpa_supplicant_stop;; 1124e3ebfccSroy esac 1134e3ebfccSroyfi 114