diff options
4 files changed, 37 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 530ed1de6..4bdfc1512 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -600,6 +600,7 @@ public class WifiInjector { mWifiThreadRunner); mBssidBlocklistMonitor = new BssidBlocklistMonitor(mWifiConnectivityHelper, mWifiLastResortWatchdog, mClock, mConnectivityLocalLog, mWifiScoreCard); + mWifiMetrics.setBssidBlocklistMonitor(mBssidBlocklistMonitor); mWifiChannelUtilization = new WifiChannelUtilization(mClock); return new WifiConnectivityManager(mContext, getScoringParams(), clientModeImpl, this, diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java index b3ba12e82..53879e515 100644 --- a/service/java/com/android/server/wifi/WifiMetrics.java +++ b/service/java/com/android/server/wifi/WifiMetrics.java @@ -197,6 +197,7 @@ public class WifiMetrics { private Handler mHandler; private ScoringParams mScoringParams; private WifiConfigManager mWifiConfigManager; + private BssidBlocklistMonitor mBssidBlocklistMonitor; private WifiNetworkSelector mWifiNetworkSelector; private PasspointManager mPasspointManager; private Context mContext; @@ -729,6 +730,7 @@ public class WifiMetrics { } sb.append(", networkSelectorExperimentId="); sb.append(mConnectionEvent.networkSelectorExperimentId); + sb.append(", numBssidInBlocklist=" + mConnectionEvent.numBssidInBlocklist); sb.append(", level2FailureReason="); switch(mConnectionEvent.level2FailureReason) { case WifiMetricsProto.ConnectionEvent.AUTH_FAILURE_NONE: @@ -832,6 +834,11 @@ public class WifiMetrics { mWifiDataStall = wifiDataStall; } + /** Sets internal BssidBlocklistMonitor member */ + public void setBssidBlocklistMonitor(BssidBlocklistMonitor bssidBlocklistMonitor) { + mBssidBlocklistMonitor = bssidBlocklistMonitor; + } + /** * Increment cumulative counters for link layer stats. * @param newStats @@ -1051,6 +1058,8 @@ public class WifiMetrics { mScanResultRssi = candidate.level; mScanResultRssiTimestampMillis = mClock.getElapsedSinceBootMillis(); } + mCurrentConnectionEvent.mConnectionEvent.numBssidInBlocklist = + mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(config.SSID); } } } diff --git a/service/proto/src/metrics.proto b/service/proto/src/metrics.proto index e943e37c4..aa0b38e22 100644 --- a/service/proto/src/metrics.proto +++ b/service/proto/src/metrics.proto @@ -801,6 +801,9 @@ message ConnectionEvent { // Connection is using an aggressively generated random MAC address. optional bool use_aggressive_mac = 14; + + // Number of BSSIDs for this network that were excluded from network selection. + optional int32 num_bssid_in_blocklist = 15; } // Number of occurrences of a specific RSSI poll rssi value diff --git a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java index c63cf487e..94d645646 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java @@ -143,6 +143,7 @@ public class WifiMetricsTest extends WifiBaseTest { @Mock Clock mClock; @Mock ScoringParams mScoringParams; @Mock WifiConfigManager mWcm; + @Mock BssidBlocklistMonitor mBssidBlocklistMonitor; @Mock PasspointManager mPpm; @Mock WifiNetworkSelector mWns; @Mock WifiPowerMetrics mWifiPowerMetrics; @@ -165,6 +166,7 @@ public class WifiMetricsTest extends WifiBaseTest { new WifiAwareMetrics(mClock), new RttMetrics(mClock), mWifiPowerMetrics, mWifiP2pMetrics, mDppMetrics); mWifiMetrics.setWifiConfigManager(mWcm); + mWifiMetrics.setBssidBlocklistMonitor(mBssidBlocklistMonitor); mWifiMetrics.setPasspointManager(mPpm); mWifiMetrics.setScoringParams(mScoringParams); mWifiMetrics.setWifiNetworkSelector(mWns); @@ -1476,6 +1478,28 @@ public class WifiMetricsTest extends WifiBaseTest { } /** + * Verify the logging of number of blocked BSSIDs in ConnectionEvent. + */ + @Test + public void testMetricNumBssidInBlocklist() throws Exception { + WifiConfiguration config = mock(WifiConfiguration.class); + config.SSID = "\"" + SSID + "\""; + when(config.getNetworkSelectionStatus()).thenReturn( + mock(WifiConfiguration.NetworkSelectionStatus.class)); + when(mBssidBlocklistMonitor.getNumBlockedBssidsForSsid(eq(config.SSID))).thenReturn(3); + mWifiMetrics.startConnectionEvent(config, "RED", + WifiMetricsProto.ConnectionEvent.ROAM_NONE); + mWifiMetrics.endConnectionEvent( + WifiMetrics.ConnectionEvent.FAILURE_ASSOCIATION_TIMED_OUT, + WifiMetricsProto.ConnectionEvent.HLF_NONE, + WifiMetricsProto.ConnectionEvent.FAILURE_REASON_UNKNOWN); + dumpProtoAndDeserialize(); + + assertEquals(1, mDecodedProto.connectionEvent.length); + assertEquals(3, mDecodedProto.connectionEvent[0].numBssidInBlocklist); + } + + /** * Test that WifiMetrics is serializing/deserializing authentication failure events. */ @Test |