mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-06-03 09:59:39 +08:00

Import DHCPCD(8) from: http://roy.marples.name/projects/dhcpcd/ The upstream sources can be obtained via: fossil clone http://roy.marples.name/projects/dhcpcd The imported version is 2014-01-29 19:46:44 [6b209507bb].
114 lines
2.6 KiB
Plaintext
114 lines
2.6 KiB
Plaintext
# Start, reconfigure and stop wpa_supplicant per wireless interface.
|
|
# This is needed because wpa_supplicant lacks hotplugging of any kind
|
|
# and the user should not be expected to have to wire it into their system
|
|
# if the base system doesn't do this itself.
|
|
|
|
if [ -z "$wpa_supplicant_conf" ]; then
|
|
for x in \
|
|
/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"
|
|
break
|
|
fi
|
|
done
|
|
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 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 -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=$?
|
|
if [ $errn != 0 ]; then
|
|
syslog err "failed to start wpa_supplicant"
|
|
syslog err "$err"
|
|
fi
|
|
return $errn
|
|
}
|
|
|
|
wpa_supplicant_reconfigure()
|
|
{
|
|
local dir err errn
|
|
|
|
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 -p "$dir" -i "$interface" reconfigure 2>&1)
|
|
errn=$?
|
|
if [ $errn != 0 ]; then
|
|
syslog err "failed to reconfigure wpa_supplicant"
|
|
syslog err "$err"
|
|
fi
|
|
return $errn
|
|
}
|
|
|
|
wpa_supplicant_stop()
|
|
{
|
|
local dir err errn
|
|
|
|
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=$?
|
|
if [ $errn != 0 ]; then
|
|
syslog err "failed to start wpa_supplicant"
|
|
syslog err "$err"
|
|
fi
|
|
return $errn
|
|
}
|
|
|
|
if [ "$ifwireless" = "1" ] && \
|
|
type wpa_supplicant >/dev/null 2>&1 && \
|
|
type wpa_cli >/dev/null 2>&1
|
|
then
|
|
case "$reason" in
|
|
PREINIT) wpa_supplicant_start;;
|
|
RECONFIGURE) wpa_supplicant_reconfigure;;
|
|
DEPARTED) wpa_supplicant_stop;;
|
|
esac
|
|
fi
|