From: Felix Fietkau Date: Fri, 8 Aug 2025 16:18:49 +0000 (+0200) Subject: wifi-scripts: add modular wps button handler scripts X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=3aee42001f493952b72a2ef3cd458bf9417c8940;p=thirdparty%2Fopenwrt.git 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 --- 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 00000000000..59b1aeff17b --- /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 00000000000..2cb7f6bec67 --- /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 073bdd18687..67a21e357aa --- 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 cdaf636c4ae..4522eec8d4e 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