diff options
author | xshu <xshu@google.com> | 2019-07-19 14:16:58 -0700 |
---|---|---|
committer | xshu <xshu@google.com> | 2019-08-20 15:19:47 -0700 |
commit | b2bca548378631f09899085b3c0032186092514f (patch) | |
tree | c05005a26ae906f19e2f1588efcb8e50f621b9db /service | |
parent | dde841e7a1679fad98662dce2b39b506c5543006 (diff) |
[MAC rand] DeviceConfigFacade refactor + plumbing
Refactors DeviceConfigFacade to centralize where fields get updated.
And plumbs the flag "aggressive_randomization_per_ssid_enabled" to
control whether the framework will consider using aggressive
randomization per-SSID based on a whitelist appraoch.
Bug: 137795359
Test: unit tests
Test: manually tested on device using "adb shell device_config put wifi
aggressive_randomization_per_ssid_enabled true"
Change-Id: I76d6338cd2d482d198fde1e5a2d1a0540c087ca6
Diffstat (limited to 'service')
4 files changed, 69 insertions, 41 deletions
diff --git a/service/java/com/android/server/wifi/DeviceConfigFacade.java b/service/java/com/android/server/wifi/DeviceConfigFacade.java index c64cd5259..f7e12efd8 100644 --- a/service/java/com/android/server/wifi/DeviceConfigFacade.java +++ b/service/java/com/android/server/wifi/DeviceConfigFacade.java @@ -16,42 +16,77 @@ package com.android.server.wifi; +import android.content.Context; +import android.os.Handler; import android.provider.DeviceConfig; -import java.util.concurrent.Executor; +import com.android.internal.R; +import com.android.internal.annotations.VisibleForTesting; + import java.util.concurrent.TimeUnit; /** * This class allows getting all configurable flags from DeviceConfig. */ public class DeviceConfigFacade { - private static final int DEFAULT_ABNORMAL_CONNECTION_DURATION_MS = - (int) TimeUnit.SECONDS.toMillis(30); + private Context mContext; + private static final String NAMESPACE = "wifi"; + // Default values of fields + @VisibleForTesting + protected static final int DEFAULT_ABNORMAL_CONNECTION_DURATION_MS = + (int) TimeUnit.SECONDS.toMillis(30); + private boolean mDefaultMacRandomizationAggressiveModeSsidWhitelistEnabled; + + // Cached values of fields updated via updateDeviceConfigFlags() + private boolean mIsAbnormalConnectionBugreportEnabled; + private int mAbnormalConnectionDurationMs; + private boolean mIsAggressiveMacRandomizationSsidWhitelistEnabled; + + public DeviceConfigFacade(Context context, Handler handler) { + mContext = context; + mDefaultMacRandomizationAggressiveModeSsidWhitelistEnabled = mContext.getResources() + .getBoolean(R.bool.config_wifi_aggressive_randomization_ssid_whitelist_enabled); + + updateDeviceConfigFlags(); + DeviceConfig.addOnPropertiesChangedListener( + NAMESPACE, + command -> handler.post(command), + properties -> { + updateDeviceConfigFlags(); + }); + } + + private void updateDeviceConfigFlags() { + mIsAbnormalConnectionBugreportEnabled = DeviceConfig.getBoolean(NAMESPACE, + "abnormal_connection_bugreport_enabled", false); + mAbnormalConnectionDurationMs = DeviceConfig.getInt(NAMESPACE, + "abnormal_connection_duration_ms", + DEFAULT_ABNORMAL_CONNECTION_DURATION_MS); + mIsAggressiveMacRandomizationSsidWhitelistEnabled = DeviceConfig.getBoolean(NAMESPACE, + "aggressive_randomization_ssid_whitelist_enabled", + mDefaultMacRandomizationAggressiveModeSsidWhitelistEnabled); + } + /** * Gets the feature flag for reporting abnormally long connections. */ public boolean isAbnormalConnectionBugreportEnabled() { - return DeviceConfig.getBoolean(NAMESPACE, "abnormal_connection_bugreport_enabled", false); + return mIsAbnormalConnectionBugreportEnabled; } /** * Gets the threshold for classifying abnormally long connections. */ public int getAbnormalConnectionDurationMs() { - return DeviceConfig.getInt(NAMESPACE, "abnormal_connection_duration_ms", - DEFAULT_ABNORMAL_CONNECTION_DURATION_MS); + return mAbnormalConnectionDurationMs; } /** - * Adds a listener that will be run on the specified executor. - * @param executor - * @param onPropertiesChangedListener + * Gets the feature flag for aggressive MAC randomization per-SSID opt-in. */ - public void addOnPropertiesChangedListener(Executor executor, - DeviceConfig.OnPropertiesChangedListener onPropertiesChangedListener) { - DeviceConfig.addOnPropertiesChangedListener(NAMESPACE, executor, - onPropertiesChangedListener); + public boolean isAggressiveMacRandomizationSsidWhitelistEnabled() { + return mIsAggressiveMacRandomizationSsidWhitelistEnabled; } } diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index 9781701bb..e056bb923 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java @@ -313,6 +313,7 @@ public class WifiConfigManager { private final int mMaxNumActiveChannelsForPartialScans; private final FrameworkFacade mFrameworkFacade; + private final DeviceConfigFacade mDeviceConfigFacade; /** * Verbose logging flag. Toggled by developer options. @@ -387,7 +388,8 @@ public class WifiConfigManager { NetworkListUserStoreData networkListUserStoreData, DeletedEphemeralSsidsStoreData deletedEphemeralSsidsStoreData, RandomizedMacStoreData randomizedMacStoreData, - FrameworkFacade frameworkFacade, Handler handler) { + FrameworkFacade frameworkFacade, Handler handler, + DeviceConfigFacade deviceConfigFacade) { mContext = context; mClock = clock; mUserManager = userManager; @@ -439,6 +441,8 @@ public class WifiConfigManager { updatePnoRecencySortingSetting(); mConnectedMacRandomzationSupported = mContext.getResources() .getBoolean(R.bool.config_wifi_connected_mac_randomization_supported); + mDeviceConfigFacade = deviceConfigFacade; + try { mSystemUiUid = mContext.getPackageManager().getPackageUidAsUser(SYSUI_PACKAGE_NAME, PackageManager.MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM); @@ -470,7 +474,14 @@ public class WifiConfigManager { * @return */ public boolean shouldUseAggressiveMode(WifiConfiguration config) { - // TODO: b/137795359 add logic for classifying network as safe for aggressive mode. + if (mDeviceConfigFacade.isAggressiveMacRandomizationSsidWhitelistEnabled()) { + return isSsidOptInForAggressiveRandomization(config.SSID); + } + return false; + } + + private boolean isSsidOptInForAggressiveRandomization(String ssid) { + // TODO: b/137795359 add logic to detect if SSID is in whitelist return false; } diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index f3ff21645..1dd917347 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -168,7 +168,6 @@ public class WifiInjector { sWifiInjector = this; mContext = context; - mDeviceConfigFacade = new DeviceConfigFacade(); mWifiScoreCard = new WifiScoreCard(mClock, Secure.getString(mContext.getContentResolver(), Secure.ANDROID_ID)); mSettingsStore = new WifiSettingsStore(mContext); @@ -193,6 +192,7 @@ public class WifiInjector { mWifiP2pServiceHandlerThread = new HandlerThread("WifiP2pService"); mWifiP2pServiceHandlerThread.start(); mCarrierNetworkConfig = new CarrierNetworkConfig(mContext, wifiHandler, mFrameworkFacade); + mDeviceConfigFacade = new DeviceConfigFacade(mContext, wifiHandler); WifiAwareMetrics awareMetrics = new WifiAwareMetrics(mClock); RttMetrics rttMetrics = new RttMetrics(mClock); mWifiP2pMetrics = new WifiP2pMetrics(mClock); @@ -246,7 +246,7 @@ public class WifiInjector { mWifiPermissionsWrapper, this, new NetworkListSharedStoreData(mContext), new NetworkListUserStoreData(mContext), new DeletedEphemeralSsidsStoreData(mClock), new RandomizedMacStoreData(), - mFrameworkFacade, wifiHandler); + mFrameworkFacade, wifiHandler, mDeviceConfigFacade); mWifiMetrics.setWifiConfigManager(mWifiConfigManager); mWifiConnectivityHelper = new WifiConnectivityHelper(mWifiNative); mConnectivityLocalLog = new LocalLog(ActivityManager.isLowRamDeviceStatic() ? 256 : 512); diff --git a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java index e257eab8b..acd10572f 100644 --- a/service/java/com/android/server/wifi/WifiLastResortWatchdog.java +++ b/service/java/com/android/server/wifi/WifiLastResortWatchdog.java @@ -79,9 +79,6 @@ public class WifiLastResortWatchdog { @VisibleForTesting public static final long LAST_TRIGGER_TIMEOUT_MILLIS = 2 * 3600 * 1000; // 2 hours - private int mAbnormalConnectionDurationMs; - private boolean mAbnormalConnectionBugreportEnabled; - /** * Cached WifiConfigurations of available networks seen within MAX_BSSID_AGE scan results @@ -136,29 +133,11 @@ public class WifiLastResortWatchdog { mClientModeImplLooper = clientModeImplLooper; mContext = context; mDeviceConfigFacade = deviceConfigFacade; - updateDeviceConfigFlags(); mHandler = new Handler(clientModeImplLooper) { public void handleMessage(Message msg) { processMessage(msg); } }; - - mDeviceConfigFacade.addOnPropertiesChangedListener( - command -> mHandler.post(command), - properties -> { - updateDeviceConfigFlags(); - }); - } - - private void updateDeviceConfigFlags() { - mAbnormalConnectionBugreportEnabled = - mDeviceConfigFacade.isAbnormalConnectionBugreportEnabled(); - mAbnormalConnectionDurationMs = - mDeviceConfigFacade.getAbnormalConnectionDurationMs(); - logv("updateDeviceConfigFlags: mAbnormalConnectionDurationMs = " - + mAbnormalConnectionDurationMs - + ", mAbnormalConnectionBugreportEnabled = " - + mAbnormalConnectionBugreportEnabled); } /** @@ -182,12 +161,15 @@ public class WifiLastResortWatchdog { switch (msg.what) { case WifiMonitor.NETWORK_CONNECTION_EVENT: // Trigger bugreport for successful connections that take abnormally long - if (mAbnormalConnectionBugreportEnabled && mLastStartConnectTime > 0) { + if (mDeviceConfigFacade.isAbnormalConnectionBugreportEnabled() + && mLastStartConnectTime > 0) { long durationMs = mClock.getElapsedSinceBootMillis() - mLastStartConnectTime; - if (durationMs > mAbnormalConnectionDurationMs) { + long abnormalConnectionDurationMs = + mDeviceConfigFacade.getAbnormalConnectionDurationMs(); + if (durationMs > abnormalConnectionDurationMs) { final String bugTitle = "Wi-Fi Bugreport: Abnormal connection time"; final String bugDetail = "Expected connection to take less than " - + mAbnormalConnectionDurationMs + " milliseconds. " + + abnormalConnectionDurationMs + " milliseconds. " + "Actually took " + durationMs + " milliseconds."; logv("Triggering bug report for abnormal connection time."); mWifiInjector.getClientModeImplHandler().post(() -> { |