Browse Source

mac80211: enhance wifi reload

If the reconf call fails force a full restart of the radio.

Signed-off-by: John Crispin <[email protected]>
John Crispin 5 years ago
parent
commit
a1dd773272
1 changed files with 8 additions and 1 deletions
  1. 8 1
      package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

+ 8 - 1
package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

@@ -329,6 +329,8 @@ $base_cfg
 
 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() {
@@ -943,11 +945,16 @@ drv_mac80211_setup() {
 	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
+				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}\"}"