mac80211: restore mac80211_interface_cleanup()
authorDaniel Golle <daniel@makrotopia.org>
Thu, 14 Nov 2019 13:02:56 +0000 (14:02 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 14 Nov 2019 13:10:58 +0000 (14:10 +0100)
Changes introduced for dynamic wifi reconfiguration left behind
unmanaged interface types. Restore parts of the old function to
also clean (unencrypted, non-DFS) mesh and ad-hoc interfaces.

Fixes: a5bc9787d4 ("mac80211: add support for dynamically
                    reconfiguring wifi")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh

index 5b174cded6403046c8b2848e75b03488cfdbf75f..2b8b2d4677b1c46a668f796cd6bb85767b2ac599 100644 (file)
@@ -814,6 +814,13 @@ mac80211_interface_cleanup() {
 
        mac80211_vap_cleanup hostapd "${primary_ap}"
        mac80211_vap_cleanup wpa_supplicant "$(uci -q -P /var/state get wireless._${phy}.splist)"
+       for wdev in $(list_phy_interfaces "$phy"); do
+               local wdev_phy="$(readlink /sys/class/net/${wdev}/phy80211)"
+               wdev_phy="$(basename "$wdev_phy")"
+               [ -n "$wdev_phy" -a "$wdev_phy" != "$phy" ] && continue
+               ip link set dev "$wdev" down 2>/dev/null
+               iw dev "$wdev" del
+       done
 }
 
 mac80211_set_noscan() {
@@ -945,6 +952,15 @@ drv_mac80211_setup() {
        wireless_set_up
 }
 
+list_phy_interfaces() {
+       local phy="$1"
+       if [ -d "/sys/class/ieee80211/${phy}/device/net" ]; then
+               ls "/sys/class/ieee80211/${phy}/device/net" 2>/dev/null;
+       else
+               ls "/sys/class/ieee80211/${phy}/device" 2>/dev/null | grep net: | sed -e 's,net:,,g'
+       fi
+}
+
 drv_mac80211_teardown() {
        wireless_process_kill_all