mac80211: enhance wifi reload
authorJohn Crispin <john@phrozen.org>
Tue, 25 Feb 2020 16:03:44 +0000 (17:03 +0100)
committerJohn Crispin <john@phrozen.org>
Tue, 25 Feb 2020 16:03:44 +0000 (17:03 +0100)
If the reconf call fails force a full restart of the radio.

Signed-off-by: John Crispin <john@phrozen.org>
package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

index ac9984ef22eb8d4c3964856c25437482cbc27692..f22730c9fc628cc2b0875adbc176eb4fe52a89e7 100644 (file)
@@ -329,6 +329,8 @@ $base_cfg
 
 EOF
        json_select ..
 
 EOF
        json_select ..
+       radio_md5sum=$(md5sum $hostapd_conf_file | cut -d" " -f1)
+       echo "radio_config_id=${radio_md5sum}" >> $hostapd_conf_file
 }
 
 mac80211_hostapd_setup_bss() {
 }
 
 mac80211_hostapd_setup_bss() {
@@ -943,11 +945,16 @@ drv_mac80211_setup() {
        local add_ap=0
        local primary_ap=${NEWAPLIST%% *}
        [ -n "$hostapd_ctrl" ] && {
        local add_ap=0
        local primary_ap=${NEWAPLIST%% *}
        [ -n "$hostapd_ctrl" ] && {
+               local no_reload=1
                if [ -n "$(ubus list | grep hostapd.$primary_ap)" ]; then
                        [ "${NEW_MD5}" = "${OLD_MD5}" ] || {
                                ubus call hostapd.$primary_ap reload
                if [ -n "$(ubus list | grep hostapd.$primary_ap)" ]; then
                        [ "${NEW_MD5}" = "${OLD_MD5}" ] || {
                                ubus call hostapd.$primary_ap reload
+                               no_reload=$?
+                               mac80211_vap_cleanup hostapd "${OLDAPLIST}"
+                               [ -n "${NEWAPLIST}" ] && mac80211_iw_interface_add "$phy" "${NEWAPLIST%% *}" __ap || return
                        }
                        }
-               else
+               fi
+               if [ "$no_reload" != "0" ]; then
                        add_ap=1
                        ubus wait_for hostapd.$phy
                        ubus call hostapd.${phy} config_add "{\"iface\":\"$primary_ap\", \"config\":\"${hostapd_conf_file}\"}"
                        add_ap=1
                        ubus wait_for hostapd.$phy
                        ubus call hostapd.${phy} config_add "{\"iface\":\"$primary_ap\", \"config\":\"${hostapd_conf_file}\"}"