summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorxshu <xshu@google.com>2019-07-19 14:16:58 -0700
committerxshu <xshu@google.com>2019-08-20 15:19:47 -0700
commitb2bca548378631f09899085b3c0032186092514f (patch)
treec05005a26ae906f19e2f1588efcb8e50f621b9db /service
parentdde841e7a1679fad98662dce2b39b506c5543006 (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')
-rw-r--r--service/java/com/android/server/wifi/DeviceConfigFacade.java61
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java15
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java4
-rw-r--r--service/java/com/android/server/wifi/WifiLastResortWatchdog.java30
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(() -> {