17827cba2SAaron LI# Start, reconfigure and stop wpa_supplicant per wireless interface. 28d36e1dfSRoy Marples# 38d36e1dfSRoy Marples# This is only needed when using wpa_supplicant-2.5 or older, OR 48d36e1dfSRoy Marples# when wpa_supplicant has not been built with CONFIG_MATCH_IFACE, OR 58d36e1dfSRoy Marples# wpa_supplicant was launched without the -M flag to activate 68d36e1dfSRoy Marples# interface matching. 77827cba2SAaron LI 87827cba2SAaron LIif [ -z "$wpa_supplicant_conf" ]; then 97827cba2SAaron LI for x in \ 107827cba2SAaron LI /etc/wpa_supplicant/wpa_supplicant-"$interface".conf \ 117827cba2SAaron LI /etc/wpa_supplicant/wpa_supplicant.conf \ 127827cba2SAaron LI /etc/wpa_supplicant-"$interface".conf \ 137827cba2SAaron LI /etc/wpa_supplicant.conf \ 147827cba2SAaron LI ; do 157827cba2SAaron LI if [ -s "$x" ]; then 167827cba2SAaron LI wpa_supplicant_conf="$x" 177827cba2SAaron LI break 187827cba2SAaron LI fi 197827cba2SAaron LI done 207827cba2SAaron LIfi 217827cba2SAaron LI: ${wpa_supplicant_conf:=/etc/wpa_supplicant.conf} 227827cba2SAaron LI 237827cba2SAaron LIwpa_supplicant_ctrldir() 247827cba2SAaron LI{ 257827cba2SAaron LI dir=$(key_get_value "[[:space:]]*ctrl_interface=" \ 267827cba2SAaron LI "$wpa_supplicant_conf") 277827cba2SAaron LI dir=$(trim "$dir") 287827cba2SAaron LI case "$dir" in 297827cba2SAaron LI DIR=*) 307827cba2SAaron LI dir=${dir##DIR=} 317827cba2SAaron LI dir=${dir%%[[:space:]]GROUP=*} 327827cba2SAaron LI dir=$(trim "$dir") 337827cba2SAaron LI ;; 347827cba2SAaron LI esac 357827cba2SAaron LI printf %s "$dir" 367827cba2SAaron LI} 377827cba2SAaron LI 387827cba2SAaron LIwpa_supplicant_start() 397827cba2SAaron LI{ 407827cba2SAaron LI # If the carrier is up, don't bother checking anything 417827cba2SAaron LI [ "$ifcarrier" = "up" ] && return 0 427827cba2SAaron LI 437827cba2SAaron LI # Pre flight checks 447827cba2SAaron LI if [ ! -s "$wpa_supplicant_conf" ]; then 457827cba2SAaron LI syslog warn \ 467827cba2SAaron LI "$wpa_supplicant_conf does not exist" 477827cba2SAaron LI syslog warn "not interacting with wpa_supplicant(8)" 487827cba2SAaron LI return 1 497827cba2SAaron LI fi 507827cba2SAaron LI dir=$(wpa_supplicant_ctrldir) 517827cba2SAaron LI if [ -z "$dir" ]; then 527827cba2SAaron LI syslog warn \ 537827cba2SAaron LI "ctrl_interface not defined in $wpa_supplicant_conf" 547827cba2SAaron LI syslog warn "not interacting with wpa_supplicant(8)" 557827cba2SAaron LI return 1 567827cba2SAaron LI fi 577827cba2SAaron LI 587827cba2SAaron LI wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 && return 0 597827cba2SAaron LI syslog info "starting wpa_supplicant" 607827cba2SAaron LI driver=${wpa_supplicant_driver:+-D}$wpa_supplicant_driver 617827cba2SAaron LI err=$(wpa_supplicant -B -c"$wpa_supplicant_conf" -i"$interface" \ 627827cba2SAaron LI "$driver" 2>&1) 637827cba2SAaron LI errn=$? 647827cba2SAaron LI if [ $errn != 0 ]; then 657827cba2SAaron LI syslog err "failed to start wpa_supplicant" 667827cba2SAaron LI syslog err "$err" 677827cba2SAaron LI fi 687827cba2SAaron LI return $errn 697827cba2SAaron LI} 707827cba2SAaron LI 717827cba2SAaron LIwpa_supplicant_reconfigure() 727827cba2SAaron LI{ 737827cba2SAaron LI dir=$(wpa_supplicant_ctrldir) 747827cba2SAaron LI [ -z "$dir" ] && return 1 757827cba2SAaron LI if ! wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1; then 767827cba2SAaron LI wpa_supplicant_start 777827cba2SAaron LI return $? 787827cba2SAaron LI fi 797827cba2SAaron LI syslog info "reconfiguring wpa_supplicant" 807827cba2SAaron LI err=$(wpa_cli -p "$dir" -i "$interface" reconfigure 2>&1) 817827cba2SAaron LI errn=$? 827827cba2SAaron LI if [ $errn != 0 ]; then 837827cba2SAaron LI syslog err "failed to reconfigure wpa_supplicant" 847827cba2SAaron LI syslog err "$err" 857827cba2SAaron LI fi 867827cba2SAaron LI return $errn 877827cba2SAaron LI} 887827cba2SAaron LI 897827cba2SAaron LIwpa_supplicant_stop() 907827cba2SAaron LI{ 917827cba2SAaron LI dir=$(wpa_supplicant_ctrldir) 927827cba2SAaron LI [ -z "$dir" ] && return 1 937827cba2SAaron LI wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 || return 0 947827cba2SAaron LI syslog info "stopping wpa_supplicant" 957827cba2SAaron LI err=$(wpa_cli -i"$interface" terminate 2>&1) 967827cba2SAaron LI errn=$? 977827cba2SAaron LI if [ $errn != 0 ]; then 988d36e1dfSRoy Marples syslog err "failed to stop wpa_supplicant" 997827cba2SAaron LI syslog err "$err" 1007827cba2SAaron LI fi 1017827cba2SAaron LI return $errn 1027827cba2SAaron LI} 1037827cba2SAaron LI 1047827cba2SAaron LIif [ "$ifwireless" = "1" ] && \ 10580aa9461SRoy Marples command -v wpa_supplicant >/dev/null 2>&1 && \ 10680aa9461SRoy Marples command -v wpa_cli >/dev/null 2>&1 1077827cba2SAaron LIthen 1087827cba2SAaron LI case "$reason" in 1097827cba2SAaron LI PREINIT) wpa_supplicant_start;; 1107827cba2SAaron LI RECONFIGURE) wpa_supplicant_reconfigure;; 111*54175cefSRoy Marples DEPARTED|STOPPED) wpa_supplicant_stop;; 1127827cba2SAaron LI esac 1137827cba2SAaron LIfi 114