mac80211: remove disconnected APs from BSS table
authorDavid Spinadel <david.spinadel@intel.com>
Tue, 3 May 2016 13:05:02 +0000 (16:05 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 12 May 2016 09:14:23 +0000 (11:14 +0200)
In some cases, after a sudden AP disappearing and reconnection to
another AP in the same ESS, user space gets the old AP in scan
results (cached). User space may decide to roam to that old AP
which will cause a disconnection and longer recovery.
Remove APs that are probably out of range from BSS table.

Signed-off-by: David Spinadel <david.spinadel@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mlme.c

index 885f4ca0888d510f255c8ff9920808e66f39df53..8d426f637f5862e113de6b0264ce3f00bbaaeb9e 100644 (file)
@@ -2399,6 +2399,11 @@ static void __ieee80211_disconnect(struct ieee80211_sub_if_data *sdata)
                return;
        }
 
+       /* AP is probably out of range (or not reachable for another reason) so
+        * remove the bss struct for that AP.
+        */
+       cfg80211_unlink_bss(local->hw.wiphy, ifmgd->associated);
+
        ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH,
                               WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY,
                               true, frame_buf);