summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorxshu <xshu@google.com>2019-11-04 17:29:10 -0800
committerxshu <xshu@google.com>2019-11-21 13:38:02 -0800
commitab76156ea09cd07865322a077801d86b99b5ea25 (patch)
tree625f6aecfc0d30dcbeb792ed327c6007280ed615 /service
parent81112baaccdab303cd586a621ea611f7cdce3dfb (diff)
Clear the Bssid blocklist when network is removed
The SSID blocklist is already being cleared when the network get removed. This CL makes it so that the BSSID blocklist is reset as well when a network is removed from the internal database for any reason. Bug: 139287182 Test: atest FrameworksWifiTests Change-Id: Ie0ba28bfb3cbfe8e996960f7a96ccf556dd77e48
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/BssidBlocklistMonitor.java10
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java1
-rw-r--r--service/java/com/android/server/wifi/WifiScoreCard.java16
3 files changed, 27 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
index 2f0ba5ff1..72bbd4937 100644
--- a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
+++ b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
@@ -259,6 +259,16 @@ public class BssidBlocklistMonitor {
}
/**
+ * Note the removal of a network from the Wifi stack's internal database and reset
+ * appropriate failure counters.
+ * @param ssid
+ */
+ public void handleNetworkRemoved(@NonNull String ssid) {
+ clearBssidBlocklistForSsid(ssid);
+ mWifiScoreCard.resetBssidBlocklistStreakForSsid(ssid);
+ }
+
+ /**
* Clears the blocklist for BSSIDs associated with the input SSID only.
* @param ssid
*/
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index e2dd98522..7a3250c98 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -1488,6 +1488,7 @@ public class WifiConfigManager {
mScanDetailCaches.remove(config.networkId);
// Stage the backup of the SettingsProvider package which backs this up.
mBackupManagerProxy.notifyDataChanged();
+ mWifiInjector.getBssidBlocklistMonitor().handleNetworkRemoved(config.SSID);
localLog("removeNetworkInternal: removed config."
+ " netId=" + config.networkId
diff --git a/service/java/com/android/server/wifi/WifiScoreCard.java b/service/java/com/android/server/wifi/WifiScoreCard.java
index 19f74d0f2..4a28452bd 100644
--- a/service/java/com/android/server/wifi/WifiScoreCard.java
+++ b/service/java/com/android/server/wifi/WifiScoreCard.java
@@ -406,6 +406,22 @@ public class WifiScoreCard {
lookupBssid(ssid, bssid).blocklistStreakCount[reason] = 0;
}
+ /**
+ * Clear the blocklist streak count for all APs that belong to this SSID.
+ */
+ public void resetBssidBlocklistStreakForSsid(@NonNull String ssid) {
+ Iterator<Map.Entry<MacAddress, PerBssid>> it = mApForBssid.entrySet().iterator();
+ while (it.hasNext()) {
+ PerBssid perBssid = it.next().getValue();
+ if (!ssid.equals(perBssid.ssid)) {
+ continue;
+ }
+ for (int i = 0; i < perBssid.blocklistStreakCount.length; i++) {
+ perBssid.blocklistStreakCount[i] = 0;
+ }
+ }
+ }
+
final class PerBssid {
public int id;
public final String l2Key;