OpenWrt
/branches/18.06.1/package/network/services/hostapd/files/wps-hotplug.sh |
@@ -1,62 +1,11 @@ |
#!/bin/sh |
|
wps_catch_credentials() { |
local iface ifaces ifc ifname ssid encryption key radio radios |
local found=0 |
|
. /usr/share/libubox/jshn.sh |
ubus -S -t 30 listen wps_credentials | while read creds; do |
json_init |
json_load "$creds" |
json_select wps_credentials || continue |
json_get_vars ifname ssid key encryption |
local ifcname="$ifname" |
json_init |
json_load "$(ubus -S call network.wireless status)" |
json_get_keys radios |
for radio in $radios; do |
json_select $radio |
json_select interfaces |
json_get_keys ifaces |
for ifc in $ifaces; do |
json_select $ifc |
json_get_vars ifname |
[ "$ifname" = "$ifcname" ] && { |
ubus -S call uci set "{\"config\":\"wireless\", \"type\":\"wifi-iface\", \ |
\"match\": { \"device\": \"$radio\", \"encryption\": \"wps\" }, \ |
\"values\": { \"encryption\": \"$encryption\", \ |
\"ssid\": \"$ssid\", \ |
\"key\": \"$key\" } }" |
ubus -S call uci commit '{"config": "wireless"}' |
ubus -S call uci apply |
} |
json_select .. |
done |
json_select .. |
json_select .. |
done |
done |
} |
|
if [ "$ACTION" = "pressed" -a "$BUTTON" = "wps" ]; then |
wps_done=0 |
ubusobjs="$( ubus -S list hostapd.* )" |
for ubusobj in $ubusobjs; do |
ubus -S call $ubusobj wps_start && wps_done=1 |
cd /var/run/hostapd |
for socket in *; do |
[ -S "$socket" ] || continue |
hostapd_cli -i "$socket" wps_pbc |
done |
[ $wps_done = 0 ] || return 0 |
wps_done=0 |
ubusobjs="$( ubus -S list wpa_supplicant.* )" |
for ubusobj in $ubusobjs; do |
ifname="$(echo $ubusobj | cut -d'.' -f2 )" |
multi_ap="" |
if [ -e "/var/run/wpa_supplicant-${ifname}.conf.is_multiap" ]; then |
ubus -S call $ubusobj wps_start '{ "multi_ap": true }' && wps_done=1 |
else |
ubus -S call $ubusobj wps_start && wps_done=1 |
fi |
done |
[ $wps_done = 0 ] || wps_catch_credentials & |
fi |
|
return 0 |