diff options
author | Roshan Pius <rpius@google.com> | 2020-05-06 08:31:40 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2020-09-11 07:38:38 -0700 |
commit | bac7430bc9de3779b078da596a2ef1badfc7fd54 (patch) | |
tree | 3667e37e8884c0a336f4a681c9b8c584c185b955 /service | |
parent | b2e7091ff04668b7dc0946c50d6043cf52dfcf6a (diff) |
SupplicantStaIfaceCallback: Refactor FILS connection event handling
The new FILS param in onStateChanged() callback in V3 HAL version
resulted in duplication of code in V10 & V13 HAL callback
implementation. Refactor the code to remove this duplication.
Changes:
a) Remove the new FILS_NETWORK_CONNECTION_EVENT message and instead add
a boolean in the regular NETWORK_CONNECTION_EVENT message to indicate
whether the connection used FILS or not.
b) Plumb the new filsHlpSent param from V13 callback all the way back to
V10 callback.
(cherry-picked from ag/11403532)
Bug: 135503681
Bug: 159687884
Test: atest com.android.server.wifi
Merged-In: I9a3694540e994c09a5268e0ae0b7722654a3384c
Change-Id: I9a3694540e994c09a5268e0ae0b7722654a3384c
Diffstat (limited to 'service')
6 files changed, 39 insertions, 77 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index e7371a9f1..f4e3ed5f3 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -910,8 +910,6 @@ public class ClientModeImpl extends StateMachine { getHandler()); mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.NETWORK_CONNECTION_EVENT, getHandler()); - mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.FILS_NETWORK_CONNECTION_EVENT, - getHandler()); mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.NETWORK_DISCONNECTION_EVENT, getHandler()); mWifiMonitor.registerHandler(mInterfaceName, WifiMonitor.RX_HS20_ANQP_ICON_EVENT, @@ -1998,7 +1996,6 @@ public class ClientModeImpl extends StateMachine { } sb.append(" blacklist=" + Boolean.toString(mDidBlackListBSSID)); break; - case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT: case WifiMonitor.NETWORK_CONNECTION_EVENT: sb.append(" "); sb.append(Integer.toString(msg.arg1)); @@ -2264,9 +2261,6 @@ public class ClientModeImpl extends StateMachine { case WifiMonitor.NETWORK_CONNECTION_EVENT: s = "NETWORK_CONNECTION_EVENT"; break; - case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT: - s = "FILS_NETWORK_CONNECTION_EVENT"; - break; case WifiMonitor.NETWORK_DISCONNECTION_EVENT: s = "NETWORK_DISCONNECTION_EVENT"; break; @@ -3456,7 +3450,6 @@ public class ClientModeImpl extends StateMachine { case CMD_RECONNECT: case CMD_REASSOCIATE: case WifiMonitor.NETWORK_CONNECTION_EVENT: - case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT: case WifiMonitor.NETWORK_DISCONNECTION_EVENT: case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT: case WifiMonitor.AUTHENTICATION_FAILURE_EVENT: @@ -4213,12 +4206,11 @@ public class ClientModeImpl extends StateMachine { } handleStatus = NOT_HANDLED; break; - case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT: - mWifiMetrics.incrementL2ConnectionThroughFilsAuthCount(); - mSentHLPs = true; case WifiMonitor.NETWORK_CONNECTION_EVENT: if (mVerboseLoggingEnabled) log("Network connection established"); mLastNetworkId = message.arg1; + mSentHLPs = message.arg2 == 1; + if (mSentHLPs) mWifiMetrics.incrementL2ConnectionThroughFilsAuthCount(); mWifiConfigManager.clearRecentFailureReason(mLastNetworkId); mLastBssid = (String) message.obj; reasonCode = message.arg2; @@ -4908,7 +4900,6 @@ public class ClientModeImpl extends StateMachine { } break; case WifiMonitor.NETWORK_CONNECTION_EVENT: - case WifiMonitor.FILS_NETWORK_CONNECTION_EVENT: mWifiInfo.setBSSID((String) message.obj); mLastNetworkId = message.arg1; mWifiInfo.setNetworkId(mLastNetworkId); diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java index 9d69003cf..0e2189ba0 100644 --- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java +++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackImpl.java @@ -157,9 +157,11 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac } } - @Override - public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, - ArrayList<Byte> ssid) { + /** + * Added to plumb the new {@code filsHlpSent} param from the V1.3 callback version. + */ + public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid, + boolean filsHlpSent) { synchronized (mLock) { mStaIfaceHal.logCallback("onStateChanged"); SupplicantState newSupplicantState = @@ -174,7 +176,8 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac } if (newState == State.COMPLETED) { mWifiMonitor.broadcastNetworkConnectionEvent( - mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), bssidStr); + mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), filsHlpSent, + bssidStr); } mWifiMonitor.broadcastSupplicantStateChangeEvent( mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), wifiSsid, @@ -183,6 +186,11 @@ abstract class SupplicantStaIfaceCallbackImpl extends ISupplicantStaIfaceCallbac } @Override + public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid) { + onStateChanged(newState, bssid, id, ssid, false); + } + + @Override public void onAnqpQueryDone(byte[/* 6 */] bssid, ISupplicantStaIfaceCallback.AnqpData data, ISupplicantStaIfaceCallback.Hs20AnqpData hs20Data) { diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java index 12e025e69..c4a3dda16 100644 --- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java +++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_1Impl.java @@ -53,10 +53,18 @@ abstract class SupplicantStaIfaceCallbackV1_1Impl extends mCallbackV10.onNetworkRemoved(id); } + /** + * Added to plumb the new {@code filsHlpSent} param from the V1.3 callback version. + */ + public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid, + boolean filsHlpSent) { + mCallbackV10.onStateChanged(newState, bssid, id, ssid, filsHlpSent); + } + @Override public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid) { - mCallbackV10.onStateChanged(newState, bssid, id, ssid); + onStateChanged(newState, bssid, id, ssid, false); } @Override diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java index 89e66d22c..973e11a4a 100644 --- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java +++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_2Impl.java @@ -59,10 +59,18 @@ abstract class SupplicantStaIfaceCallbackV1_2Impl extends mCallbackV11.onNetworkRemoved(id); } + /** + * Added to plumb the new {@code filsHlpSent} param from the V1.3 callback version. + */ + public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid, + boolean filsHlpSent) { + mCallbackV11.onStateChanged(newState, bssid, id, ssid, filsHlpSent); + } + @Override public void onStateChanged(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid) { - mCallbackV11.onStateChanged(newState, bssid, id, ssid); + onStateChanged(newState, bssid, id, ssid, false); } @Override diff --git a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java index f293b9d7c..154fde40b 100644 --- a/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java +++ b/service/java/com/android/server/wifi/SupplicantStaIfaceCallbackV1_3Impl.java @@ -15,19 +15,13 @@ */ package com.android.server.wifi; -import static com.android.server.wifi.SupplicantStaIfaceCallbackImpl.supplicantHidlStateToFrameworkState; import android.annotation.NonNull; import android.hardware.wifi.supplicant.V1_0.ISupplicantStaIfaceCallback; -import android.hardware.wifi.supplicant.V1_3.ISupplicantStaIfaceCallback.BssTmData; -import android.net.wifi.SupplicantState; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; -import android.net.wifi.WifiSsid; import android.util.Log; -import com.android.server.wifi.util.NativeUtil; - import java.util.ArrayList; abstract class SupplicantStaIfaceCallbackV1_3Impl extends @@ -37,7 +31,6 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends private final String mIfaceName; private final WifiMonitor mWifiMonitor; private final SupplicantStaIfaceHal.SupplicantStaIfaceHalCallbackV1_2 mCallbackV12; - private boolean mStateIsFourwayV13 = false; // Used to help check for PSK password mismatch SupplicantStaIfaceCallbackV1_3Impl(@NonNull SupplicantStaIfaceHal staIfaceHal, @NonNull String ifaceName, @@ -57,9 +50,7 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends @Override public void onNetworkRemoved(int id) { - mStaIfaceHal.logCallback("onNetworkRemoved"); - // Reset 4way handshake state since network has been removed. - mStateIsFourwayV13 = false; + mCallbackV12.onNetworkRemoved(id); } @Override @@ -96,20 +87,7 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends @Override public void onDisconnected(byte[/* 6 */] bssid, boolean locallyGenerated, int reasonCode) { - mStaIfaceHal.logCallback("onDisconnected"); - if (mStaIfaceHal.isVerboseLoggingEnabled()) { - Log.e(TAG, "onDisconnected 4way=" + mStateIsFourwayV13 - + " locallyGenerated=" + locallyGenerated - + " reasonCode=" + reasonCode); - } - if (mStateIsFourwayV13 - && (!locallyGenerated || reasonCode != ReasonCode.IE_IN_4WAY_DIFFERS)) { - mWifiMonitor.broadcastAuthenticationFailureEvent( - mIfaceName, WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD, -1); - } - mWifiMonitor.broadcastNetworkDisconnectionEvent( - mIfaceName, locallyGenerated ? 1 : 0, reasonCode, - NativeUtil.macAddressFromByteArray(bssid)); + mCallbackV12.onDisconnected(bssid, locallyGenerated, reasonCode); } @Override @@ -365,25 +343,6 @@ abstract class SupplicantStaIfaceCallbackV1_3Impl extends @Override public void onStateChanged_1_3(int newState, byte[/* 6 */] bssid, int id, ArrayList<Byte> ssid, boolean filsHlpSent) { - mStaIfaceHal.logCallback("onStateChanged_1_3"); - SupplicantState newSupplicantState = - supplicantHidlStateToFrameworkState(newState); - WifiSsid wifiSsid = - WifiSsid.createFromByteArray(NativeUtil.byteArrayFromArrayList(ssid)); - String bssidStr = NativeUtil.macAddressFromByteArray(bssid); - mStateIsFourwayV13 = - (newState == ISupplicantStaIfaceCallback.State.FOURWAY_HANDSHAKE); - if (newSupplicantState == SupplicantState.COMPLETED) { - if (filsHlpSent) { - mWifiMonitor.broadcastFilsNetworkConnectionEvent( - mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), bssidStr); - } else { - mWifiMonitor.broadcastNetworkConnectionEvent( - mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), bssidStr); - } - } - mWifiMonitor.broadcastSupplicantStateChangeEvent( - mIfaceName, mStaIfaceHal.getCurrentNetworkId(mIfaceName), - wifiSsid, bssidStr, newSupplicantState); + mCallbackV12.onStateChanged(newState, bssid, id, ssid, filsHlpSent); } } diff --git a/service/java/com/android/server/wifi/WifiMonitor.java b/service/java/com/android/server/wifi/WifiMonitor.java index 7f620851d..32a96d0eb 100644 --- a/service/java/com/android/server/wifi/WifiMonitor.java +++ b/service/java/com/android/server/wifi/WifiMonitor.java @@ -100,9 +100,6 @@ public class WifiMonitor { /* MBO/OCE events */ public static final int MBO_OCE_BSS_TM_HANDLING_DONE = BASE + 71; - /* Fils network connection completed */ - public static final int FILS_NETWORK_CONNECTION_EVENT = BASE + 62; - /* WPS config errrors */ private static final int CONFIG_MULTIPLE_PBC_DETECTED = 12; private static final int CONFIG_AUTH_FAILURE = 18; @@ -500,21 +497,12 @@ public class WifiMonitor { * * @param iface Name of iface on which this occurred. * @param networkId ID of the network in wpa_supplicant. + * @param filsHlpSent Whether the connection used FILS. * @param bssid BSSID of the access point. */ - public void broadcastNetworkConnectionEvent(String iface, int networkId, String bssid) { - sendMessage(iface, NETWORK_CONNECTION_EVENT, networkId, 0, bssid); - } - - /** - * Broadcast the fils network connection event to all the handlers registered for this event. - * - * @param iface Name of iface on which this occurred. - * @param networkId ID of the network in wpa_supplicant. - * @param bssid BSSID of the access point. - */ - public void broadcastFilsNetworkConnectionEvent(String iface, int networkId, String bssid) { - sendMessage(iface, FILS_NETWORK_CONNECTION_EVENT, networkId, 0, bssid); + public void broadcastNetworkConnectionEvent(String iface, int networkId, boolean filsHlpSent, + String bssid) { + sendMessage(iface, NETWORK_CONNECTION_EVENT, networkId, filsHlpSent ? 1 : 0, bssid); } /** |