From eaa9626c7ed73dabdaab0719cd9f01aa5ba618e9 Mon Sep 17 00:00:00 2001 From: xshu Date: Thu, 3 Sep 2020 19:39:15 -0700 Subject: [PATCH] Enhanced MAC randomization API for passpoint Allow configuring a PasspointConfiguration to use enhanced MAC randomization. By default, passpoint networks use persistent randomization. Bug: 162801581 Test: atest android.net.wifi Change-Id: Ia23f42f26aab7becf2cd03c71230529396bea3a4 --- .../net/wifi/WifiNetworkSuggestion.java | 2 + .../wifi/hotspot2/PasspointConfiguration.java | 39 ++++++++++++++++++- .../net/wifi/WifiNetworkSuggestionTest.java | 25 ++++++++++++ .../hotspot2/PasspointConfigurationTest.java | 1 + 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java index 145c39d754f94..e992c830aa872 100644 --- a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java +++ b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java @@ -732,6 +732,8 @@ public final class WifiNetworkSuggestion implements Parcelable { + "suggestion with Passpoint configuration"); } wifiConfiguration = buildWifiConfigurationForPasspoint(); + mPasspointConfiguration.setEnhancedMacRandomizationEnabled( + mIsEnhancedMacRandomizationEnabled); } else { if (mSsid == null) { throw new IllegalStateException("setSsid should be invoked for suggestion"); diff --git a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java index d1d1780a25fde..61a6e16f9c43a 100644 --- a/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java +++ b/wifi/java/android/net/wifi/hotspot2/PasspointConfiguration.java @@ -443,6 +443,11 @@ public final class PasspointConfiguration implements Parcelable { */ private boolean mIsMacRandomizationEnabled = true; + /** + * Whether this passpoint configuration should use enhanced MAC randomization. + */ + private boolean mIsEnhancedMacRandomizationEnabled = false; + /** * Indicates if the end user has expressed an explicit opinion about the * meteredness of this network, such as through the Settings app. @@ -480,6 +485,20 @@ public final class PasspointConfiguration implements Parcelable { mIsMacRandomizationEnabled = enabled; } + /** + * This setting is only applicable if MAC randomization is enabled. + * If set to true, the framework will periodically generate new MAC addresses for new + * connections. + * If set to false (the default), the framework will use the same locally generated MAC address + * for connections to this passpoint configuration. + * @param enabled true to use enhanced MAC randomization, false to use persistent MAC + * randomization. + * @hide + */ + public void setEnhancedMacRandomizationEnabled(boolean enabled) { + mIsEnhancedMacRandomizationEnabled = enabled; + } + /** * Sets the metered override setting for this Passpoint configuration. * @@ -530,6 +549,19 @@ public final class PasspointConfiguration implements Parcelable { return mIsMacRandomizationEnabled; } + /** + * When MAC randomization is enabled, this indicates whether enhanced MAC randomization or + * persistent MAC randomization will be used for connections to this Passpoint network. + * If true, the MAC address used for connections will periodically change. Otherwise, the same + * locally generated MAC will be used for all connections to this passpoint configuration. + * + * @return true for enhanced MAC randomization enabled. False for disabled. + * @hide + */ + public boolean isEnhancedMacRandomizationEnabled() { + return mIsEnhancedMacRandomizationEnabled; + } + /** * Constructor for creating PasspointConfiguration with default values. */ @@ -574,6 +606,7 @@ public final class PasspointConfiguration implements Parcelable { mCarrierId = source.mCarrierId; mIsAutojoinEnabled = source.mIsAutojoinEnabled; mIsMacRandomizationEnabled = source.mIsMacRandomizationEnabled; + mIsEnhancedMacRandomizationEnabled = source.mIsEnhancedMacRandomizationEnabled; mMeteredOverride = source.mMeteredOverride; } @@ -606,6 +639,7 @@ public final class PasspointConfiguration implements Parcelable { dest.writeInt(mCarrierId); dest.writeBoolean(mIsAutojoinEnabled); dest.writeBoolean(mIsMacRandomizationEnabled); + dest.writeBoolean(mIsEnhancedMacRandomizationEnabled); dest.writeInt(mMeteredOverride); } @@ -639,6 +673,7 @@ public final class PasspointConfiguration implements Parcelable { && mCarrierId == that.mCarrierId && mIsAutojoinEnabled == that.mIsAutojoinEnabled && mIsMacRandomizationEnabled == that.mIsMacRandomizationEnabled + && mIsEnhancedMacRandomizationEnabled == that.mIsEnhancedMacRandomizationEnabled && mMeteredOverride == that.mMeteredOverride && (mServiceFriendlyNames == null ? that.mServiceFriendlyNames == null : mServiceFriendlyNames.equals(that.mServiceFriendlyNames)); @@ -651,7 +686,7 @@ public final class PasspointConfiguration implements Parcelable { mSubscriptionExpirationTimeMillis, mUsageLimitUsageTimePeriodInMinutes, mUsageLimitStartTimeInMillis, mUsageLimitDataLimit, mUsageLimitTimeLimitInMinutes, mServiceFriendlyNames, mCarrierId, mIsAutojoinEnabled, mIsMacRandomizationEnabled, - mMeteredOverride); + mIsEnhancedMacRandomizationEnabled, mMeteredOverride); } @Override @@ -707,6 +742,7 @@ public final class PasspointConfiguration implements Parcelable { builder.append("CarrierId:" + mCarrierId); builder.append("IsAutojoinEnabled:" + mIsAutojoinEnabled); builder.append("mIsMacRandomizationEnabled:" + mIsMacRandomizationEnabled); + builder.append("mIsEnhancedMacRandomizationEnabled:" + mIsEnhancedMacRandomizationEnabled); builder.append("mMeteredOverride:" + mMeteredOverride); return builder.toString(); } @@ -815,6 +851,7 @@ public final class PasspointConfiguration implements Parcelable { config.mCarrierId = in.readInt(); config.mIsAutojoinEnabled = in.readBoolean(); config.mIsMacRandomizationEnabled = in.readBoolean(); + config.mIsEnhancedMacRandomizationEnabled = in.readBoolean(); config.mMeteredOverride = in.readInt(); return config; } diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java index 631e5e23a9b86..668d2385a4ae5 100644 --- a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java +++ b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java @@ -708,6 +708,31 @@ public class WifiNetworkSuggestionTest { suggestion.wifiConfiguration.macRandomizationSetting); } + /** + * Verify that the builder creates the appropriate PasspointConfiguration according to the + * enhanced MAC randomization setting. + */ + @Test + public void testWifiNetworkSuggestionBuilderSetMacRandomizationPasspoint() { + PasspointConfiguration passpointConfiguration = PasspointTestUtils.createConfig(); + WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder() + .setPasspointConfig(passpointConfiguration) + .build(); + assertEquals(false, suggestion.passpointConfiguration.isEnhancedMacRandomizationEnabled()); + + suggestion = new WifiNetworkSuggestion.Builder() + .setPasspointConfig(passpointConfiguration) + .setIsEnhancedMacRandomizationEnabled(false) + .build(); + assertEquals(false, suggestion.passpointConfiguration.isEnhancedMacRandomizationEnabled()); + + suggestion = new WifiNetworkSuggestion.Builder() + .setPasspointConfig(passpointConfiguration) + .setIsEnhancedMacRandomizationEnabled(true) + .build(); + assertEquals(true, suggestion.passpointConfiguration.isEnhancedMacRandomizationEnabled()); + } + /** * Check that parcel marshalling/unmarshalling works */ diff --git a/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java b/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java index 8270d643ca65d..badcf5205c4d0 100644 --- a/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java +++ b/wifi/tests/src/android/net/wifi/hotspot2/PasspointConfigurationTest.java @@ -186,6 +186,7 @@ public class PasspointConfigurationTest { assertFalse(config.validateForR2()); assertTrue(config.isAutojoinEnabled()); assertTrue(config.isMacRandomizationEnabled()); + assertFalse(config.isEnhancedMacRandomizationEnabled()); assertTrue(config.getMeteredOverride() == METERED_OVERRIDE_NONE); }