mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 01:52:51 +00:00
mac80211: hot reload was not working reliably when going from single STA to any other mode
Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
@@ -821,6 +821,15 @@ mac80211_set_vif_txpower() {
|
|||||||
[ "$wds" -gt 0 ] && echo 1 > /sys/kernel/debug/ieee80211/$phy/netdev\:$ifname/disable_offload
|
[ "$wds" -gt 0 ] && echo 1 > /sys/kernel/debug/ieee80211/$phy/netdev\:$ifname/disable_offload
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wpa_supplicant_init_config() {
|
||||||
|
json_set_namespace wpa_supp prev
|
||||||
|
|
||||||
|
json_init
|
||||||
|
json_add_array config
|
||||||
|
|
||||||
|
json_set_namespace "$prev"
|
||||||
|
}
|
||||||
|
|
||||||
wpa_supplicant_add_interface() {
|
wpa_supplicant_add_interface() {
|
||||||
local ifname="$1"
|
local ifname="$1"
|
||||||
local mode="$2"
|
local mode="$2"
|
||||||
@@ -831,12 +840,6 @@ wpa_supplicant_add_interface() {
|
|||||||
|
|
||||||
json_set_namespace wpa_supp prev
|
json_set_namespace wpa_supp prev
|
||||||
|
|
||||||
[ -n "$wpa_supp_init" ] || {
|
|
||||||
json_init
|
|
||||||
json_add_array config
|
|
||||||
wpa_supp_init=1
|
|
||||||
}
|
|
||||||
|
|
||||||
json_add_object
|
json_add_object
|
||||||
json_add_string ctrl "$_rpath"
|
json_add_string ctrl "$_rpath"
|
||||||
json_add_string iface "$ifname"
|
json_add_string iface "$ifname"
|
||||||
@@ -852,9 +855,7 @@ wpa_supplicant_add_interface() {
|
|||||||
|
|
||||||
json_set_namespace "$prev"
|
json_set_namespace "$prev"
|
||||||
|
|
||||||
ret="$?"
|
wpa_supp_init=1
|
||||||
|
|
||||||
return $ret
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wpa_supplicant_set_config() {
|
wpa_supplicant_set_config() {
|
||||||
@@ -870,7 +871,11 @@ wpa_supplicant_set_config() {
|
|||||||
json_cleanup
|
json_cleanup
|
||||||
json_set_namespace "$prev"
|
json_set_namespace "$prev"
|
||||||
|
|
||||||
ubus wait_for wpa_supplicant
|
ubus -S -t 0 wait_for wpa_supplicant || {
|
||||||
|
[ -n "$wpa_supp_init" ] || return 0
|
||||||
|
|
||||||
|
ubus wait_for wpa_supplicant
|
||||||
|
}
|
||||||
|
|
||||||
local supplicant_res="$(ubus call wpa_supplicant config_set "$data")"
|
local supplicant_res="$(ubus call wpa_supplicant config_set "$data")"
|
||||||
ret="$?"
|
ret="$?"
|
||||||
@@ -880,9 +885,28 @@ wpa_supplicant_set_config() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hostapd_set_config() {
|
||||||
|
[ -n "$hostapd_ctrl" ] || {
|
||||||
|
ubus call hostapd config_set '{ "phy": "'"$phy"'", "config": "", "prev_config": "'"${hostapd_conf_file}.prev"'" }' > /dev/null
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ubus wait_for hostapd
|
||||||
|
local hostapd_res="$(ubus call hostapd config_set "{ \"phy\": \"$phy\", \"config\":\"${hostapd_conf_file}\", \"prev_config\": \"${hostapd_conf_file}.prev\"}")"
|
||||||
|
ret="$?"
|
||||||
|
[ "$ret" != 0 -o -z "$hostapd_res" ] && {
|
||||||
|
wireless_setup_failed HOSTAPD_START_FAILED
|
||||||
|
return
|
||||||
|
}
|
||||||
|
wireless_add_process "$(jsonfilter -s "$hostapd_res" -l 1 -e @.pid)" "/usr/sbin/hostapd" 1 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
wpa_supplicant_start() {
|
wpa_supplicant_start() {
|
||||||
local phy="$1"
|
local phy="$1"
|
||||||
|
|
||||||
|
[ -n "$wpa_supp_init" ] || return 0
|
||||||
|
|
||||||
ubus call wpa_supplicant config_set '{ "phy": "'"$phy"'" }' > /dev/null
|
ubus call wpa_supplicant config_set '{ "phy": "'"$phy"'" }' > /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1083,26 +1107,17 @@ drv_mac80211_setup() {
|
|||||||
json_init
|
json_init
|
||||||
json_set_namespace "$prev"
|
json_set_namespace "$prev"
|
||||||
|
|
||||||
|
wpa_supplicant_init_config
|
||||||
|
|
||||||
mac80211_prepare_iw_htmode
|
mac80211_prepare_iw_htmode
|
||||||
active_ifnames=
|
active_ifnames=
|
||||||
for_each_interface "ap sta adhoc mesh monitor" mac80211_prepare_vif ${multiple_bssid}
|
for_each_interface "ap sta adhoc mesh monitor" mac80211_prepare_vif ${multiple_bssid}
|
||||||
for_each_interface "ap sta adhoc mesh monitor" mac80211_setup_vif
|
for_each_interface "ap sta adhoc mesh monitor" mac80211_setup_vif
|
||||||
|
|
||||||
[ -n "$wpa_supp_init" ] && wpa_supplicant_set_config "$phy"
|
[ -x /usr/sbin/wpa_supplicant ] && wpa_supplicant_set_config "$phy"
|
||||||
|
[ -x /usr/sbin/hostapd ] && hostapd_set_config "$phy"
|
||||||
|
|
||||||
[ -n "$hostapd_ctrl" ] && {
|
[ -x /usr/sbin/wpa_supplicant ] && wpa_supplicant_start "$phy"
|
||||||
ubus wait_for hostapd
|
|
||||||
|
|
||||||
local hostapd_res="$(ubus call hostapd config_set "{ \"phy\": \"$phy\", \"config\":\"${hostapd_conf_file}\", \"prev_config\": \"${hostapd_conf_file}.prev\"}")"
|
|
||||||
ret="$?"
|
|
||||||
[ "$ret" != 0 -o -z "$hostapd_res" ] && {
|
|
||||||
wireless_setup_failed HOSTAPD_START_FAILED
|
|
||||||
return
|
|
||||||
}
|
|
||||||
wireless_add_process "$(jsonfilter -s "$hostapd_res" -l 1 -e @.pid)" "/usr/sbin/hostapd" 1 1
|
|
||||||
}
|
|
||||||
|
|
||||||
[ -n "$wpa_supp_init" ] && wpa_supplicant_start "$phy"
|
|
||||||
|
|
||||||
json_set_namespace wdev_uc prev
|
json_set_namespace wdev_uc prev
|
||||||
wdev_tool "$phy" "$(json_dump)" $active_ifnames
|
wdev_tool "$phy" "$(json_dump)" $active_ifnames
|
||||||
|
|||||||
Reference in New Issue
Block a user