From d66d7953ed80e1ef044499b96ef404598b944021 Mon Sep 17 00:00:00 2001 From: Sunil Ravi Date: Sun, 22 Mar 2020 17:32:35 -0700 Subject: Blacklist the BSS only if MBO assoc retry delay is included. When handling 802.11v bss transition request frame, blacklist the bss only if MBO association retry delay is included. Bug: 150579651 Test: Manual - Basic wifi sanity test Test: atest com.android.server.wifi.ClientModeImplTest Change-Id: I7e87e66b95e352f64f5f9ed2c740c022b2400d26 --- .../java/com/android/server/wifi/ClientModeImpl.java | 12 ++++-------- .../src/com/android/server/wifi/ClientModeImplTest.java | 17 ++++++++++------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index 7cdc8e084..30d989491 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -6154,11 +6154,6 @@ public class ClientModeImpl extends StateMachine { return; } - boolean isImminentBit = (frameData.mBssTmDataFlagsMask - & (MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT - | MboOceConstants.BTM_DATA_FLAG_BSS_TERMINATION_INCLUDED - | MboOceConstants.BTM_DATA_FLAG_ESS_DISASSOCIATION_IMMINENT)) != 0; - if ((frameData.mBssTmDataFlagsMask & MboOceConstants.BTM_DATA_FLAG_MBO_CELL_DATA_CONNECTION_PREFERENCE_INCLUDED) != 0) { @@ -6166,12 +6161,13 @@ public class ClientModeImpl extends StateMachine { } - if (isImminentBit) { + if ((frameData.mBssTmDataFlagsMask + & MboOceConstants.BTM_DATA_FLAG_MBO_ASSOC_RETRY_DELAY_INCLUDED) + != 0) { long duration = frameData.mBlackListDurationMs; if (duration == 0) { /* - * When AP sets one of the imminent bits and disassociation timer / BSS termination - * duration / MBO assoc retry delay is set to zero(reserved as per spec), + * When MBO assoc retry delay is set to zero(reserved as per spec), * blacklist the BSS for sometime to avoid AP rejecting the re-connect request. */ duration = MboOceConstants.DEFAULT_BLACKLIST_DURATION_MS; diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java index 42bcd0013..8cff6f870 100644 --- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java @@ -4130,18 +4130,20 @@ public class ClientModeImplTest extends WifiBaseTest { } /** - * Test that handleBssTransitionRequest() blacklist the BSS when - * imminent bit is set. + * Test that handleBssTransitionRequest() blacklist the BSS upon + * receiving BTM request frame that contains MBO-OCE IE with an + * association retry delay attribute. */ @Test - public void testBtmFrameWithImminentBitBlackListTheBssid() throws Exception { + public void testBtmFrameWithMboAssocretryDelayBlackListTheBssid() throws Exception { // Connect to network with |sBSSID|, |sFreq|. connect(); MboOceController.BtmFrameData btmFrmData = new MboOceController.BtmFrameData(); btmFrmData.mStatus = MboOceConstants.BTM_RESPONSE_STATUS_REJECT_UNSPECIFIED; - btmFrmData.mBssTmDataFlagsMask = MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT; + btmFrmData.mBssTmDataFlagsMask = MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT + | MboOceConstants.BTM_DATA_FLAG_MBO_ASSOC_RETRY_DELAY_INCLUDED; btmFrmData.mBlackListDurationMs = 60000; mCmi.sendMessage(WifiMonitor.MBO_OCE_BSS_TM_HANDLING_DONE, btmFrmData); @@ -4164,14 +4166,15 @@ public class ClientModeImplTest extends WifiBaseTest { btmFrmData.mStatus = MboOceConstants.BTM_RESPONSE_STATUS_REJECT_UNSPECIFIED; btmFrmData.mBssTmDataFlagsMask = MboOceConstants.BTM_DATA_FLAG_DISASSOCIATION_IMMINENT + | MboOceConstants.BTM_DATA_FLAG_BSS_TERMINATION_INCLUDED | MboOceConstants.BTM_DATA_FLAG_MBO_CELL_DATA_CONNECTION_PREFERENCE_INCLUDED; - btmFrmData.mBlackListDurationMs = 0; + btmFrmData.mBlackListDurationMs = 60000; mCmi.sendMessage(WifiMonitor.MBO_OCE_BSS_TM_HANDLING_DONE, btmFrmData); mLooper.dispatchAll(); - verify(mBssidBlocklistMonitor).blockBssidForDurationMs(sBSSID, sSSID, - MboOceConstants.DEFAULT_BLACKLIST_DURATION_MS); + verify(mBssidBlocklistMonitor, never()).blockBssidForDurationMs(sBSSID, sSSID, + btmFrmData.mBlackListDurationMs); verify(mWifiConnectivityManager).forceConnectivityScan(ClientModeImpl.WIFI_WORK_SOURCE); verify(mWifiMetrics, times(1)).incrementMboCellularSwitchRequestCount(); verify(mWifiMetrics, times(1)) -- cgit v1.2.3