[openwrt/openwrt] wifi-scripts: add modular wps button handler scripts
LEDE Commits
lede-commits at lists.infradead.org
Fri Aug 8 09:54:22 PDT 2025
nbd pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/3aee42001f493952b72a2ef3cd458bf9417c8940
commit 3aee42001f493952b72a2ef3cd458bf9417c8940
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Fri Aug 8 18:18:49 2025 +0200
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 <nbd at nbd.name>
---
.../config/wifi-scripts/files/etc/rc.button/wps | 6 ++++
.../config/wifi-scripts/files/etc/rc.wps/40-wps_ap | 10 ++++++
.../wifi-scripts/files/etc/rc.wps/50-wps_sta} | 42 ++++++++--------------
package/network/services/hostapd/Makefile | 2 --
4 files changed, 31 insertions(+), 29 deletions(-)
diff --git a/package/network/config/wifi-scripts/files/etc/rc.button/wps b/package/network/config/wifi-scripts/files/etc/rc.button/wps
new file mode 100755
index 0000000000..59b1aeff17
--- /dev/null
+++ b/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
diff --git a/package/network/config/wifi-scripts/files/etc/rc.wps/40-wps_ap b/package/network/config/wifi-scripts/files/etc/rc.wps/40-wps_ap
new file mode 100755
index 0000000000..2cb7f6bec6
--- /dev/null
+++ b/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 ]
+
diff --git a/package/network/services/hostapd/files/wps-hotplug.sh b/package/network/config/wifi-scripts/files/etc/rc.wps/50-wps_sta
old mode 100644
new mode 100755
similarity index 52%
rename from package/network/services/hostapd/files/wps-hotplug.sh
rename to package/network/config/wifi-scripts/files/etc/rc.wps/50-wps_sta
index 073bdd1868..67a21e357a
--- a/package/network/services/hostapd/files/wps-hotplug.sh
+++ b/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
diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile
index cdaf636c4a..4522eec8d4 100644
--- a/package/network/services/hostapd/Makefile
+++ b/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
More information about the lede-commits
mailing list