You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.3 KiB
Plaintext

4 years ago
#!/bin/sh
board=$(cat /tmp/sysinfo/board_name)
WPS_LED=/sys/class/leds/blue/trigger
case "$board" in
ap151)
WPS_LED=/sys/class/leds/ap151:green:wlan/trigger
;;
esac
mode=$1
check_status()
{
local active
active=true
call=$1
while [ $active == true ]
do
running=false
temp1=$(cat $WPS_LED)
temp2=$(echo ${temp1##*\[})
state=$(echo ${temp2%%]*})
for dir in /var/run/hostapd-*; do
[ -d "$dir" ] || continue
for vap_dir in $dir/ath* $dir/wlan*; do
[ -r "$vap_dir" ] || continue
retval=$(eval $call)
if [ \( $(echo "$retval" | grep -c '^RUNNING\|Active') -gt 0 \) -a \( $state != "timer" \) ]; then
running=true
elif [ \( $(echo "$retval" | grep -c '^RUNNING\|Active') -gt 0 \) -a \( $state == "timer" \) ]; then
running=true
fi
done
done
if [ $running == false ]; then
echo none > $WPS_LED
active=false
else
echo timer > $WPS_LED
fi
sleep 1
done
}
check_clone()
{
local active
active=true
while [ $active == true ]
do
temp1=$(cat $WPS_LED)
temp2=$(echo ${temp1##*\[})
state=$(echo ${temp2%%]*})
retval=$(uci show wireless.wps_clone | grep -c 'running')
if [ \( $retval -gt 0 \) -a \( $state != "timer" \) ]; then
echo timer > $WPS_LED
elif [ $retval -eq 0 ]; then
active=false
echo none > $WPS_LED
fi
sleep 1
done
}
#save config
old_trigger=$(cat $WPS_LED | cut -d "[" -f2 | cut -d "]" -f1)
case $mode in
pbc) check_status 'hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_status' ;;
pin) check_status 'hostapd_cli -i "${vap_dir#"$dir/"}" -p "$dir" wps_get_pin_status' ;;
clone) check_clone ;;
esac
#restore config
echo $old_trigger > $WPS_LED