aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/hostapd/files
diff options
context:
space:
mode:
authorJohn Crispin <john@phrozen.org>2019-10-30 16:57:22 +0100
committerDaniel Golle <daniel@makrotopia.org>2019-11-12 11:52:26 +0100
commit60fb4c92b6b0d1582d31e02167b90b424185f3a2 (patch)
treef707a8fe5cc2e1abf21b51d38f9767f1b1d69996 /package/network/services/hostapd/files
parent155ede4f1fdb192b11f8ae2dbffda5f7ef4903bd (diff)
downloadupstream-60fb4c92b6b0d1582d31e02167b90b424185f3a2.tar.gz
upstream-60fb4c92b6b0d1582d31e02167b90b424185f3a2.tar.bz2
upstream-60fb4c92b6b0d1582d31e02167b90b424185f3a2.zip
hostapd: add ubus reload
Add ubus interface to hostapd and wpa_supplicant to allow dynamically reloading wiface configuration without having to restart the hostapd process. As a consequence, both hostapd and wpa_supplicant are now started persistently on boot for each wifi device in the system and then receive ubus calls adding, modifying or removing interface configuration. At a later stage it would be desirable to reduce the services to one single instance managing all radios. Signed-off-by: John Crispin <john@phrozen.org> Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Diffstat (limited to 'package/network/services/hostapd/files')
-rw-r--r--package/network/services/hostapd/files/hostapd.hotplug14
-rw-r--r--package/network/services/hostapd/files/hostapd.sh25
2 files changed, 27 insertions, 12 deletions
diff --git a/package/network/services/hostapd/files/hostapd.hotplug b/package/network/services/hostapd/files/hostapd.hotplug
new file mode 100644
index 0000000000..d568b3c85a
--- /dev/null
+++ b/package/network/services/hostapd/files/hostapd.hotplug
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+[ ${ACTION} = "remove" -a -n "${DEVICENAME}" ] && {
+ kill $(cat /var/run/hostapd-${DEVICENAME}.pid)
+ rm -rf /var/run/hostapd-${DEVICENAME}.pid /var/run/hostapd-${DEVICENAME}/
+ kill $(cat /var/run/wpa_supplicant-${DEVICENAME}.pid)
+ rm -rf /var/run/wpa_supplicant-${DEVICENAME}.pid /var/run/wpa_supplicant-${DEVICENAME}/
+}
+
+[ ${ACTION} = "add" -a -n "${DEVICENAME}" ] && {
+ /usr/sbin/hostapd -s -n ${DEVICENAME} -P /var/run/hostapd-${DEVICENAME}.pid -g /var/run/hostapd-${DEVICENAME}/global -B &
+ mkdir -p /var/run/wpa_supplicant-${DEVICENAME}
+ /usr/sbin/wpa_supplicant -s -n ${DEVICENAME} -P /var/run/wpa_supplicant-${DEVICENAME}.pid -g /var/run/wpa_supplicant-${DEVICENAME}/global -B &
+}
diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh
index 3c1504ca60..f03b98ff85 100644
--- a/package/network/services/hostapd/files/hostapd.sh
+++ b/package/network/services/hostapd/files/hostapd.sh
@@ -254,7 +254,7 @@ hostapd_set_bss_options() {
wireless_vif_parse_encryption
- local bss_conf
+ local bss_conf bss_md5sum
local wep_rekey wpa_group_rekey wpa_pair_rekey wpa_master_rekey wpa_key_mgmt
json_get_vars \
@@ -627,6 +627,9 @@ hostapd_set_bss_options() {
}
}
+ bss_md5sum=$(echo $bss_conf | md5sum | cut -d" " -f1)
+ append bss_conf "config_id=$bss_md5sum" "$N"
+
append "$var" "$bss_conf" "$N"
return 0
}
@@ -950,21 +953,19 @@ EOF
}
wpa_supplicant_run() {
- local ifname="$1"; shift
+ local ifname="$1"
+ local hostapd_ctrl="$2"
_wpa_supplicant_common "$ifname"
- /usr/sbin/wpa_supplicant -B -s \
- ${network_bridge:+-b $network_bridge} \
- -P "/var/run/wpa_supplicant-${ifname}.pid" \
- -D ${_w_driver:-wext} \
- -i "$ifname" \
- -c "$_config" \
- -C "$_rpath" \
- "$@"
+ ubus call wpa_supplicant.$phy config_add "{ \
+ \"driver\": \"${_w_driver:-wext}\", \"ctrl\": \"$_rpath\", \
+ \"iface\": \"$ifname\", \"config\": \"$_config\" \
+ ${network_bridge:+, \"bridge\": \"$network_bridge\"} \
+ ${hostapd_ctrl:+, \"hostapd_ctrl\": \"$hostapd_ctrl\"} \
+ }"
ret="$?"
- wireless_add_process "$(cat "/var/run/wpa_supplicant-${ifname}.pid")" /usr/sbin/wpa_supplicant 1
[ "$ret" != 0 ] && wireless_setup_vif_failed WPA_SUPPLICANT_FAILED
@@ -972,5 +973,5 @@ wpa_supplicant_run() {
}
hostapd_common_cleanup() {
- killall hostapd wpa_supplicant meshd-nl80211
+ killall meshd-nl80211
}