summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorxshu <xshu@google.com>2020-09-10 19:46:04 -0700
committerxshu <xshu@google.com>2020-09-15 17:04:20 -0700
commit80d0986ea4ec6d2bff2af02a9e1a31593c200540 (patch)
tree98043d9a8dddf490de8e364bd0bf7e69531aebdd /service
parent21130f070cd84f847b2efd59c099b86068733347 (diff)
Exponential backoff for external score blocklist
(cherry-picked from 89ab95af87eff69a5865124fc4bc529e1f6efb52) Changes: 1. When the external scorer marks a network as unacceptable, block the BSSID for 0.5/1/2/... up to 64 minutes instead of the previous fixed 30 seconds. 2. Modified test cases to increase coverage. Bug: 158695052 Test: atest com.android.server.wifi Change-Id: I0f1413563530c8e66ea6a061c78bc49bffd61091
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/BssidBlocklistMonitor.java16
-rw-r--r--service/java/com/android/server/wifi/WifiScoreReport.java4
-rw-r--r--service/res/values/config.xml7
-rw-r--r--service/res/values/overlayable.xml1
4 files changed, 23 insertions, 5 deletions
diff --git a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
index d96fdb39e..e3fe32ab7 100644
--- a/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
+++ b/service/java/com/android/server/wifi/BssidBlocklistMonitor.java
@@ -330,8 +330,7 @@ public class BssidBlocklistMonitor {
if (shouldWaitForWatchdogToTriggerFirst(bssid, reasonCode)) {
return false;
}
- int baseBlockDurationMs = mContext.getResources().getInteger(
- R.integer.config_wifiBssidBlocklistMonitorBaseBlockDurationMs);
+ int baseBlockDurationMs = getBaseBlockDurationForReason(reasonCode);
addToBlocklist(entry,
getBlocklistDurationWithExponentialBackoff(currentStreak, baseBlockDurationMs),
reasonCode, rssi);
@@ -341,6 +340,17 @@ public class BssidBlocklistMonitor {
return false;
}
+ private int getBaseBlockDurationForReason(int blockReason) {
+ switch (blockReason) {
+ case REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE:
+ return mContext.getResources().getInteger(R.integer
+ .config_wifiBssidBlocklistMonitorConnectedScoreBaseBlockDurationMs);
+ default:
+ return mContext.getResources().getInteger(
+ R.integer.config_wifiBssidBlocklistMonitorBaseBlockDurationMs);
+ }
+ }
+
/**
* Note a failure event on a bssid and perform appropriate actions.
* @return True if the blocklist has been modified.
@@ -383,6 +393,8 @@ public class BssidBlocklistMonitor {
ssid, bssid, connectionTime);
if (connectionTime - prevConnectionTime > ABNORMAL_DISCONNECT_RESET_TIME_MS) {
mWifiScoreCard.resetBssidBlocklistStreak(ssid, bssid, REASON_ABNORMAL_DISCONNECT);
+ mWifiScoreCard.resetBssidBlocklistStreak(ssid, bssid,
+ REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE);
}
BssidStatus status = mBssidStatusMap.get(bssid);
diff --git a/service/java/com/android/server/wifi/WifiScoreReport.java b/service/java/com/android/server/wifi/WifiScoreReport.java
index 80a561d05..bd92c6dac 100644
--- a/service/java/com/android/server/wifi/WifiScoreReport.java
+++ b/service/java/com/android/server/wifi/WifiScoreReport.java
@@ -60,7 +60,6 @@ public class WifiScoreReport {
private static final int WIFI_CONNECTED_NETWORK_SCORER_IDENTIFIER = 0;
private static final int INVALID_SESSION_ID = -1;
private static final long MIN_TIME_TO_WAIT_BEFORE_BLOCKLIST_BSSID_MILLIS = 29000;
- private static final long DURATION_TO_BLOCKLIST_BSSID_AFTER_FIRST_EXITING_MILLIS = 30000;
private static final long INVALID_WALL_CLOCK_MILLIS = -1;
/**
@@ -751,9 +750,8 @@ public class WifiScoreReport {
if ((mLastScoreBreachLowTimeMillis != INVALID_WALL_CLOCK_MILLIS)
&& ((millis - mLastScoreBreachLowTimeMillis)
>= MIN_TIME_TO_WAIT_BEFORE_BLOCKLIST_BSSID_MILLIS)) {
- mBssidBlocklistMonitor.blockBssidForDurationMs(mWifiInfo.getBSSID(),
+ mBssidBlocklistMonitor.handleBssidConnectionFailure(mWifiInfo.getBSSID(),
mWifiInfo.getSSID(),
- DURATION_TO_BLOCKLIST_BSSID_AFTER_FIRST_EXITING_MILLIS,
BssidBlocklistMonitor.REASON_FRAMEWORK_DISCONNECT_CONNECTED_SCORE,
mWifiInfo.getRssi());
mLastScoreBreachLowTimeMillis = INVALID_WALL_CLOCK_MILLIS;
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index 1220c260a..0264c3eae 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -355,6 +355,13 @@
config_wifiBssidBlocklistMonitorFailureStreakCap is set to 7-->
<integer translatable="false" name="config_wifiBssidBlocklistMonitorBaseBlockDurationMs"> 300000 </integer>
+ <!-- Base duration to block a BSSID after the external connected scorer sets wifi as unusable.
+ The block duration is increased exponentially if the same BSSID is repeated marked as unusable.
+ ie. 0.5/1/2/4/8/16/32/64 minutes - capped at 64 minutes because the default for
+ config_wifiBssidBlocklistMonitorFailureStreakCap is set to 7. The block duration is reset to
+ the base value 3 hours after the latest connection to this BSSID. -->
+ <integer translatable="false" name="config_wifiBssidBlocklistMonitorConnectedScoreBaseBlockDurationMs"> 30000 </integer>
+
<!-- The failure streak is the number of times a BSSID consecutively gets blocked without ever
successfully connecting in between, and is used to calculate the exponentially growing blocklist time.
The config_wifiBssidBlocklistMonitorFailureStreakCap controls how many times the block duration
diff --git a/service/res/values/overlayable.xml b/service/res/values/overlayable.xml
index 56c94246d..60764ba6e 100644
--- a/service/res/values/overlayable.xml
+++ b/service/res/values/overlayable.xml
@@ -114,6 +114,7 @@
<item type="integer" name="config_wifiBssidBlocklistMonitorDhcpFailureThreshold" />
<item type="integer" name="config_wifiBssidBlocklistMonitorAbnormalDisconnectThreshold" />
<item type="integer" name="config_wifiBssidBlocklistMonitorBaseBlockDurationMs" />
+ <item type="integer" name="config_wifiBssidBlocklistMonitorConnectedScoreBaseBlockDurationMs" />
<item type="integer" name="config_wifiBssidBlocklistMonitorFailureStreakCap" />
<item type="integer" name="config_wifiBssidBlocklistAbnormalDisconnectTimeWindowMs" />
<item type="bool" name="config_wifiScanHiddenNetworksScanOnlyMode" />