diff options
author | xshu <xshu@google.com> | 2020-02-20 17:14:54 -0800 |
---|---|---|
committer | Oscar Shu <xshu@google.com> | 2020-02-24 18:05:51 +0000 |
commit | 5430ea403a6a6d7882695cbf29eeedb5e85e2b04 (patch) | |
tree | 78c0967fe087eb92aac46d65811b85a55deff86c | |
parent | 9416ff33f0d1fbff7877c7a2c0e866922b4ace94 (diff) |
Set mTargetBssid during assocation rejection
mTargetBssid is currently set to "any" by default, until
BSSID association is successful.
This change is needed so that the BssidBlocklistMonitor could function
correctly for association rejection and association timeout errors.
Bug: 149709890
Test: atest com.android.server.wifi
Change-Id: Ibcf27e83e122b272d43e6b29309a71dd24170ae9
-rw-r--r-- | service/java/com/android/server/wifi/ClientModeImpl.java | 65 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java | 3 |
2 files changed, 37 insertions, 31 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index 3dfb0e190..fa6ac8c6e 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -359,7 +359,7 @@ public class ClientModeImpl extends StateMachine { // This is the BSSID we are trying to associate to, it can be set to SUPPLICANT_BSSID_ANY // if we havent selected a BSSID for joining. - private String mTargetRoamBSSID = SUPPLICANT_BSSID_ANY; + private String mTargetBssid = SUPPLICANT_BSSID_ANY; // This one is used to track the current target network ID. This is used for error // handling during connection setup since many error message from supplicant does not report // SSID Once connected, it will be set to invalid @@ -381,7 +381,7 @@ public class ClientModeImpl extends StateMachine { } /** - * Method to clear {@link #mTargetRoamBSSID} and reset the the current connected network's + * Method to clear {@link #mTargetBssid} and reset the current connected network's * bssid in wpa_supplicant after a roam/connect attempt. */ public boolean clearTargetBssid(String dbg) { @@ -399,12 +399,12 @@ public class ClientModeImpl extends StateMachine { if (mVerboseLoggingEnabled) { logd(dbg + " clearTargetBssid " + bssid + " key=" + config.getKey()); } - mTargetRoamBSSID = bssid; + mTargetBssid = bssid; return mWifiNative.setConfiguredNetworkBSSID(mInterfaceName, bssid); } /** - * Set Config's default BSSID (for association purpose) and {@link #mTargetRoamBSSID} + * Set Config's default BSSID (for association purpose) and {@link #mTargetBssid} * @param config config need set BSSID * @param bssid default BSSID to assocaite with when connect to this network * @return false -- does not change the current default BSSID of the configure @@ -423,7 +423,7 @@ public class ClientModeImpl extends StateMachine { if (mVerboseLoggingEnabled) { Log.d(TAG, "setTargetBssid set to " + bssid + " key=" + config.getKey()); } - mTargetRoamBSSID = bssid; + mTargetBssid = bssid; config.getNetworkSelectionStatus().setNetworkSelectionBSSID(bssid); return true; } @@ -1956,8 +1956,8 @@ public class ClientModeImpl extends StateMachine { if (msg.obj != null) { sb.append(" BSSID=").append((String) msg.obj); } - if (mTargetRoamBSSID != null) { - sb.append(" Target=").append(mTargetRoamBSSID); + if (mTargetBssid != null) { + sb.append(" Target=").append(mTargetBssid); } sb.append(" roam=").append(Boolean.toString(mIsAutoRoaming)); break; @@ -2013,15 +2013,16 @@ public class ClientModeImpl extends StateMachine { sb.append(Integer.toString(msg.arg2)); config = mWifiConfigManager.getConfiguredNetwork(msg.arg1); if (config != null) { - sb.append(" ").append(config.getKey()); + sb.append(" targetConfigKey=").append(config.getKey()); + sb.append(" BSSID=" + config.BSSID); } - if (mTargetRoamBSSID != null) { - sb.append(" ").append(mTargetRoamBSSID); + if (mTargetBssid != null) { + sb.append(" targetBssid=").append(mTargetBssid); } sb.append(" roam=").append(Boolean.toString(mIsAutoRoaming)); config = getCurrentWifiConfiguration(); if (config != null) { - sb.append(config.getKey()); + sb.append(" currentConfigKey=").append(config.getKey()); } break; case CMD_START_ROAM: @@ -2042,8 +2043,8 @@ public class ClientModeImpl extends StateMachine { sb.append(" !seen=").append(result.seen); } } - if (mTargetRoamBSSID != null) { - sb.append(" ").append(mTargetRoamBSSID); + if (mTargetBssid != null) { + sb.append(" ").append(mTargetBssid); } sb.append(" roam=").append(Boolean.toString(mIsAutoRoaming)); sb.append(" fail count=").append(Integer.toString(mRoamFailCount)); @@ -2872,7 +2873,7 @@ public class ClientModeImpl extends StateMachine { int blocklistReason = convertToBssidBlocklistMonitorFailureReason( level2FailureCode, level2FailureReason); - String bssid = mLastBssid == null ? mTargetRoamBSSID : mLastBssid; + String bssid = mLastBssid == null ? mTargetBssid : mLastBssid; String ssid = mWifiInfo.getSSID(); if (WifiManager.UNKNOWN_SSID.equals(ssid)) { ssid = getTargetSsid(); @@ -3611,7 +3612,7 @@ public class ClientModeImpl extends StateMachine { } String bssid = mWifiInfo.getBSSID(); if (bssid == null) { - bssid = mTargetRoamBSSID; + bssid = mTargetBssid; } ScanDetailCache scanDetailCache = mWifiConfigManager.getScanDetailCacheForNetwork(config.networkId); @@ -3726,7 +3727,12 @@ public class ClientModeImpl extends StateMachine { + reasonCode + " timedOut=" + Boolean.toString(timedOut)); if (bssid == null || TextUtils.isEmpty(bssid)) { // If BSSID is null, use the target roam BSSID - bssid = mTargetRoamBSSID; + bssid = mTargetBssid; + } else if (mTargetBssid == SUPPLICANT_BSSID_ANY) { + // This is needed by BssidBlocklistMonitor to block continuously + // failing BSSIDs. Need to set here because mTargetBssid is currently + // not being set until association success. + mTargetBssid = bssid; } mWifiConfigManager.updateNetworkSelectionStatus(mTargetNetworkId, WifiConfiguration.NetworkSelectionStatus @@ -3817,7 +3823,7 @@ public class ClientModeImpl extends StateMachine { mWifiInjector.getWifiLastResortWatchdog() .noteConnectionFailureAndTriggerIfNeeded( getTargetSsid(), - (mLastBssid == null) ? mTargetRoamBSSID : mLastBssid, + (mLastBssid == null) ? mTargetBssid : mLastBssid, WifiLastResortWatchdog.FAILURE_CODE_AUTHENTICATION); } break; @@ -3963,8 +3969,7 @@ public class ClientModeImpl extends StateMachine { mBssidBlocklistMonitor.updateFirmwareRoamingConfiguration(config.SSID); updateWifiConfigOnStartConnection(config, bssid); - - reportConnectionAttemptStart(config, mTargetRoamBSSID, + reportConnectionAttemptStart(config, mTargetBssid, WifiMetricsProto.ConnectionEvent.ROAM_UNRELATED); String currentMacAddress = mWifiNative.getMacAddress(mInterfaceName); @@ -4150,7 +4155,7 @@ public class ClientModeImpl extends StateMachine { case WifiMonitor.TARGET_BSSID_EVENT: // Trying to associate to this BSSID if (message.obj != null) { - mTargetRoamBSSID = (String) message.obj; + mTargetBssid = (String) message.obj; } break; case CMD_GET_LINK_LAYER_STATS: @@ -4640,7 +4645,7 @@ public class ClientModeImpl extends StateMachine { mWifiInjector.getWifiLastResortWatchdog() .noteConnectionFailureAndTriggerIfNeeded( getTargetSsid(), - (mLastBssid == null) ? mTargetRoamBSSID : mLastBssid, + (mLastBssid == null) ? mTargetBssid : mLastBssid, WifiLastResortWatchdog.FAILURE_CODE_DHCP); break; } @@ -4671,7 +4676,7 @@ public class ClientModeImpl extends StateMachine { mWifiInjector.getWifiLastResortWatchdog() .noteConnectionFailureAndTriggerIfNeeded( getTargetSsid(), - (mLastBssid == null) ? mTargetRoamBSSID : mLastBssid, + (mLastBssid == null) ? mTargetBssid : mLastBssid, WifiLastResortWatchdog.FAILURE_CODE_DHCP); transitionTo(mDisconnectingState); break; @@ -4959,7 +4964,7 @@ public class ClientModeImpl extends StateMachine { .noteConnectionFailureAndTriggerIfNeeded( getTargetSsid(), (message.obj == null) - ? mTargetRoamBSSID : (String) message.obj, + ? mTargetBssid : (String) message.obj, WifiLastResortWatchdog.FAILURE_CODE_DHCP); handleStatus = NOT_HANDLED; break; @@ -5053,7 +5058,7 @@ public class ClientModeImpl extends StateMachine { + stateChangeResult.toString()); } if (stateChangeResult.BSSID != null - && stateChangeResult.BSSID.equals(mTargetRoamBSSID)) { + && stateChangeResult.BSSID.equals(mTargetBssid)) { handleNetworkDisconnect(); transitionTo(mDisconnectedState); } @@ -5062,7 +5067,7 @@ public class ClientModeImpl extends StateMachine { // We completed the layer2 roaming part mAssociated = true; if (stateChangeResult.BSSID != null) { - mTargetRoamBSSID = stateChangeResult.BSSID; + mTargetBssid = stateChangeResult.BSSID; } } break; @@ -5125,12 +5130,12 @@ public class ClientModeImpl extends StateMachine { String bssid = (String) message.obj; if (true) { String target = ""; - if (mTargetRoamBSSID != null) target = mTargetRoamBSSID; + if (mTargetBssid != null) target = mTargetBssid; log("NETWORK_DISCONNECTION_EVENT in roaming state" + " BSSID=" + bssid + " target=" + target); } - if (bssid != null && bssid.equals(mTargetRoamBSSID)) { + if (bssid != null && bssid.equals(mTargetBssid)) { handleNetworkDisconnect(); transitionTo(mDisconnectedState); } @@ -5332,9 +5337,9 @@ public class ClientModeImpl extends StateMachine { + " my state " + getCurrentState().getName() + " nid=" + Integer.toString(netId) + " config " + config.getKey() - + " targetRoamBSSID " + mTargetRoamBSSID); + + " targetRoamBSSID " + mTargetBssid); - reportConnectionAttemptStart(config, mTargetRoamBSSID, + reportConnectionAttemptStart(config, mTargetBssid, WifiMetricsProto.ConnectionEvent.ROAM_ENTERPRISE); if (mWifiNative.roamToNetwork(mInterfaceName, config)) { mLastConnectAttemptTimestamp = mClock.getWallClockMillis(); @@ -5481,7 +5486,7 @@ public class ClientModeImpl extends StateMachine { stopIpClient(); if (message.arg2 == 15 /* FOURWAY_HANDSHAKE_TIMEOUT */) { String bssid = (message.obj == null) - ? mTargetRoamBSSID : (String) message.obj; + ? mTargetBssid : (String) message.obj; mWifiInjector.getWifiLastResortWatchdog() .noteConnectionFailureAndTriggerIfNeeded( getTargetSsid(), bssid, diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java index a31247be0..c14f7bb69 100644 --- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java @@ -2980,7 +2980,8 @@ public class ClientModeImplTest extends WifiBaseTest { @Test public void testNotifiesBssidBlocklistMonitorLowRssi() throws Exception { initializeAndAddNetworkAndVerifySuccess(); - mCmi.sendMessage(ClientModeImpl.CMD_START_CONNECT, FRAMEWORK_NETWORK_ID, 0, sBSSID); + mCmi.sendMessage(ClientModeImpl.CMD_START_CONNECT, FRAMEWORK_NETWORK_ID, 0, + ClientModeImpl.SUPPLICANT_BSSID_ANY); mCmi.sendMessage(WifiMonitor.ASSOCIATION_REJECTION_EVENT, 1, 0, sBSSID); when(mWifiConfigManager.findScanRssi(eq(FRAMEWORK_NETWORK_ID), anyInt())).thenReturn(-80); when(mWifiConfigManager.getScanDetailCacheForNetwork(FRAMEWORK_NETWORK_ID)) |