Pārlūkot izejas kodu

wifi-scripts: add modular wps button handler scripts

Execute scripts in /etc/rc.wps until one of them returns a exit code of 0.
Split up sta and ap handling of wps into separate scripts.

Signed-off-by: Felix Fietkau <[email protected]>
Felix Fietkau 4 mēneši atpakaļ
vecāks
revīzija
3aee42001f

+ 6 - 0
package/network/config/wifi-scripts/files/etc/rc.button/wps

@@ -0,0 +1,6 @@
+#!/bin/sh
+[ "$ACTION" = "pressed" ] && exit 5
+for script in /etc/rc.wps/*; do
+	[ -x "$script" ] || continue
+	"$script" && break
+done

+ 10 - 0
package/network/config/wifi-scripts/files/etc/rc.wps/40-wps_ap

@@ -0,0 +1,10 @@
+#!/bin/sh
+
+[ "$SEEN" -ge 3 ] && exit 1
+wps_done=0
+ubusobjs="$( ubus -S list hostapd.* )"
+for ubusobj in $ubusobjs; do
+	ubus -S call $ubusobj wps_start && wps_done=1
+done
+[ $wps_done = 1 ]
+

+ 15 - 27
package/network/services/hostapd/files/wps-hotplug.sh → package/network/config/wifi-scripts/files/etc/rc.wps/50-wps_sta

@@ -1,4 +1,6 @@
 #!/bin/sh
+[ "$SEEN" -lt 3 ] && exit 1
+[ "$ACTION" = "released" ] || exit 1
 
 wps_catch_credentials() {
 	local iface ifaces ifc ifname ssid encryption key radio radios
@@ -38,32 +40,18 @@ wps_catch_credentials() {
 	done
 }
 
-if [ "$ACTION" = "released" ] && [ "$BUTTON" = "wps" ]; then
-	# If the button was pressed for 3 seconds or more, trigger WPS on
-	# wpa_supplicant only, no matter if hostapd is running or not.  If
-	# was pressed for less than 3 seconds, try triggering on
-	# hostapd. If there is no hostapd instance to trigger it on or WPS
-	# is not enabled on them, trigger it on wpa_supplicant.
-	if [ "$SEEN" -lt 3 ] ; then
-		wps_done=0
-		ubusobjs="$( ubus -S list hostapd.* )"
-		for ubusobj in $ubusobjs; do
-			ubus -S call $ubusobj wps_start && wps_done=1
-		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
-	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
+done
+[ $wps_done = 0 ] && exit 1
 
-return 0
+wps_catch_credentials &
+exit 0

+ 0 - 2
package/network/services/hostapd/Makefile

@@ -726,14 +726,12 @@ endef
 define Package/hostapd-common/install
 	$(INSTALL_DIR) \
 	  $(1)/etc/capabilities \
-	  $(1)/etc/rc.button \
 	  $(1)/etc/hotplug.d/ieee80211 \
 	  $(1)/etc/init.d $(1)/lib/netifd \
 	  $(1)/usr/share/acl.d \
 	  $(1)/usr/share/hostap
 	$(INSTALL_BIN) ./files/dhcp-get-server.sh $(1)/lib/netifd/dhcp-get-server.sh
 	$(INSTALL_BIN) ./files/wpad.init $(1)/etc/init.d/wpad
-	$(INSTALL_BIN) ./files/wps-hotplug.sh $(1)/etc/rc.button/wps
 	$(INSTALL_DATA) ./files/wpad_acl.json $(1)/usr/share/acl.d
 	$(INSTALL_DATA) ./files/wpad.json $(1)/etc/capabilities
 endef