Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eaa9626c authored by xshu's avatar xshu
Browse files

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
parent e1f6fabe
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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");
+38 −1
Original line number Diff line number Diff line
@@ -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;
            }
+25 −0
Original line number Diff line number Diff line
@@ -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
     */
+1 −0
Original line number Diff line number Diff line
@@ -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);
    }