if [ -z "$wpa_supplicant_conf" ]; then
for x in \
- /etc/wpa_supplicant.conf \
+ /etc/wpa_supplicant/wpa_supplicant-"$interface".conf \
/etc/wpa_supplicant/wpa_supplicant.conf \
+ /etc/wpa_supplicant-"$interface".conf \
+ /etc/wpa_supplicant.conf \
; do
if [ -s "$x" ]; then
wpa_supplicant_conf="$x"
fi
: ${wpa_supplicant_conf:=/etc/wpa_supplicant.conf}
+wpa_supplcant_ctrldir() {
+ local dir
+
+ dir=$(key_get_value "[[:space:]]*ctrl_interface=" \
+ "$wpa_supplicant_conf")
+ dir=$(trim "$dir")
+ case "$dir" in
+ DIR=*)
+ dir=${dir##DIR=}
+ dir=${dir%%[[:space:]]GROUP=*}
+ dir=$(trim "$dir")
+ ;;
+ esac
+ printf %s "$dir"
+}
+
wpa_supplicant_start()
{
- local err errn
+ local dir err errn
+
+ # Pre flight checks
+ if [ ! -s "$wpa_supplicant_conf" ]; then
+ syslog warn \
+ "$wpa_supplicant_conf does not exist"
+ syslog warn "not interacting with wpa_supplicant(8)"
+ return 1
+ fi
+ dir=$(wpa_supplcant_ctrldir)
+ if [ -z "$dir" ]; then
+ syslog warn \
+ "ctrl_interface not defined in $wpa_supplicant_conf"
+ syslog warn "not interacting with wpa_supplicant(8)"
+ return 1
+ fi
- wpa_cli -i "$interface" status >/dev/null 2>&1 && return 0
+ wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 && return 0
syslog info "starting wpa_supplicant"
err=$(wpa_supplicant -B -c"$wpa_supplicant_conf" -i"$interface" 2>&1)
errn=$?
wpa_supplicant_reconfigure()
{
- local err errn
+ local dir err errn
- if ! wpa_cli -i "$interface" status >/dev/null 2>&1; then
+ dir=$(wpa_supplcant_ctrldir)
+ [ -z "$dir" ] && return 1
+ if ! wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1; then
wpa_supplicant_start
return $?
fi
syslog info "reconfiguring wpa_supplicant"
- err=$(wpa_cli -i"$interface" reconfigure 2>&1)
+ err=$(wpa_cli -p "$dir" -i "$interface" reconfigure 2>&1)
errn=$?
if [ $errn != 0 ]; then
syslog err "failed to reconfigure wpa_supplicant"
wpa_supplicant_stop()
{
- local err errn
+ local dir err errn
- wpa_cli -i "$interface" status >/dev/null 2>&1 || return 0
+ dir=$(wpa_supplcant_ctrldir)
+ [ -z "$dir" ] && return 1
+ wpa_cli -p "$dir" -i "$interface" status >/dev/null 2>&1 || return 0
syslog info "stopping wpa_supplicant"
err=$(wpa_cli -i"$interface" terminate 2>&1)
errn=$?
fi
return $errn
}
-
-if [ "$ifwireless" = "1" -a -s "$wpa_supplicant_conf" ] && \
+if [ "$ifwireless" = "1" ] && \
type wpa_supplicant >/dev/null 2>&1 && \
type wpa_cli >/dev/null 2>&1
then