summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/Android.bp1
-rw-r--r--framework/Android.bp7
-rw-r--r--framework/api/system-current.txt1
-rw-r--r--framework/java/android/net/wifi/SoftApConfiguration.java81
-rw-r--r--framework/tests/src/android/net/wifi/SoftApConfigurationTest.java49
-rw-r--r--service/java/com/android/server/wifi/WifiApConfigStore.java19
-rw-r--r--service/java/com/android/server/wifi/util/XmlUtil.java5
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java36
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java44
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java11
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/util/ApConfigUtilTest.java10
11 files changed, 231 insertions, 33 deletions
diff --git a/apex/Android.bp b/apex/Android.bp
index ad1a97eefb..c9d7936592 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -23,6 +23,7 @@ apex_defaults {
androidManifest: ":com.android.wifi-androidManifest",
bootclasspath_fragments: ["com.android.wifi-bootclasspath-fragment"],
systemserverclasspath_fragments: ["com.android.wifi-systemserverclasspath-fragment"],
+ compat_configs: ["wifi-compat-config"],
// from build rule `cacerts_wfa`
prebuilts: [
"target-cacert-wifi-674b5f5b.0",
diff --git a/framework/Android.bp b/framework/Android.bp
index a547f2d494..4b193f2480 100644
--- a/framework/Android.bp
+++ b/framework/Android.bp
@@ -100,6 +100,7 @@ java_defaults {
"androidx.annotation_annotation",
"unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
"framework-connectivity.stubs.module_lib",
+ "app-compat-annotations",
],
aidl: {
include_dirs: [
@@ -190,3 +191,9 @@ filegroup {
name: "wifi-jarjar-rules",
srcs: ["jarjar-rules.txt"],
}
+
+platform_compat_config
+{
+ name: "wifi-compat-config",
+ src: ":framework-wifi-pre-jarjar",
+}
diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt
index 71f4ea6c5d..bb62f964d8 100644
--- a/framework/api/system-current.txt
+++ b/framework/api/system-current.txt
@@ -282,6 +282,7 @@ package android.net.wifi {
method @NonNull public android.util.SparseIntArray getChannels();
method public int getMacRandomizationSetting();
method public int getMaxNumberOfClients();
+ method @NonNull public android.net.MacAddress getPersistentRandomizedMacAddress();
method public long getShutdownTimeoutMillis();
method @NonNull public java.util.List<android.net.wifi.ScanResult.InformationElement> getVendorElements();
method public boolean isAutoShutdownEnabled();
diff --git a/framework/java/android/net/wifi/SoftApConfiguration.java b/framework/java/android/net/wifi/SoftApConfiguration.java
index bfbb8146be..0e1b5b913f 100644
--- a/framework/java/android/net/wifi/SoftApConfiguration.java
+++ b/framework/java/android/net/wifi/SoftApConfiguration.java
@@ -21,6 +21,9 @@ import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.compat.Compatibility;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
import android.net.MacAddress;
import android.net.wifi.util.HexEncoding;
import android.os.Build;
@@ -142,7 +145,12 @@ public final class SoftApConfiguration implements Parcelable {
private static final int MIN_CH_60G_BAND = 1;
private static final int MAX_CH_60G_BAND = 6;
-
+ /**
+ * Requires to configure MAC randomization setting to None when configuring BSSID.
+ */
+ @ChangeId
+ @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.S)
+ private static final long FORCE_MUTUAL_EXCLUSIVE_BSSID_MAC_RAMDONIZATION_SETTING = 215656264L;
private static boolean isChannelBandPairValid(int channel, @BandType int band) {
switch (band) {
@@ -316,6 +324,12 @@ public final class SoftApConfiguration implements Parcelable {
private boolean mIsUserConfiguration;
/**
+ * Randomized MAC address to use with this configuration when MAC randomization setting
+ * is {@link #RANDOMIZATION_PERSISTENT}.
+ */
+ private final @Nullable MacAddress mPersistentRandomizedMacAddress;
+
+ /**
* Delay in milliseconds before shutting down an instance in bridged AP.
*/
private final long mBridgedModeOpportunisticShutdownTimeoutMillis;
@@ -359,7 +373,8 @@ public final class SoftApConfiguration implements Parcelable {
int macRandomizationSetting, boolean bridgedModeOpportunisticShutdownEnabled,
boolean ieee80211axEnabled, boolean ieee80211beEnabled, boolean isUserConfiguration,
long bridgedModeOpportunisticShutdownTimeoutMillis,
- @NonNull List<ScanResult.InformationElement> vendorElements) {
+ @NonNull List<ScanResult.InformationElement> vendorElements,
+ @Nullable MacAddress persistentRandomizedMacAddress) {
mWifiSsid = ssid;
mBssid = bssid;
mPassphrase = passphrase;
@@ -385,6 +400,7 @@ public final class SoftApConfiguration implements Parcelable {
mBridgedModeOpportunisticShutdownTimeoutMillis =
bridgedModeOpportunisticShutdownTimeoutMillis;
mVendorElements = new ArrayList<>(vendorElements);
+ mPersistentRandomizedMacAddress = persistentRandomizedMacAddress;
}
@Override
@@ -416,7 +432,9 @@ public final class SoftApConfiguration implements Parcelable {
&& mIsUserConfiguration == other.mIsUserConfiguration
&& mBridgedModeOpportunisticShutdownTimeoutMillis
== other.mBridgedModeOpportunisticShutdownTimeoutMillis
- && Objects.equals(mVendorElements, other.mVendorElements);
+ && Objects.equals(mVendorElements, other.mVendorElements)
+ && Objects.equals(mPersistentRandomizedMacAddress,
+ other.mPersistentRandomizedMacAddress);
}
@Override
@@ -427,7 +445,7 @@ public final class SoftApConfiguration implements Parcelable {
mAllowedClientList, mMacRandomizationSetting,
mBridgedModeOpportunisticShutdownEnabled, mIeee80211axEnabled, mIeee80211beEnabled,
mIsUserConfiguration, mBridgedModeOpportunisticShutdownTimeoutMillis,
- mVendorElements);
+ mVendorElements, mPersistentRandomizedMacAddress);
}
@Override
@@ -455,6 +473,8 @@ public final class SoftApConfiguration implements Parcelable {
sbuf.append(" \n Ieee80211beEnabled = ").append(mIeee80211beEnabled);
sbuf.append(" \n isUserConfiguration = ").append(mIsUserConfiguration);
sbuf.append(" \n vendorElements = ").append(mVendorElements);
+ sbuf.append(" \n mPersistentRandomizedMacAddress = ")
+ .append(mPersistentRandomizedMacAddress);
return sbuf.toString();
}
@@ -479,6 +499,7 @@ public final class SoftApConfiguration implements Parcelable {
dest.writeBoolean(mIsUserConfiguration);
dest.writeLong(mBridgedModeOpportunisticShutdownTimeoutMillis);
dest.writeTypedList(mVendorElements);
+ dest.writeParcelable(mPersistentRandomizedMacAddress, flags);
}
/* Reference from frameworks/base/core/java/android/os/Parcel.java */
@@ -534,7 +555,8 @@ public final class SoftApConfiguration implements Parcelable {
in.createTypedArrayList(MacAddress.CREATOR),
in.createTypedArrayList(MacAddress.CREATOR), in.readInt(), in.readBoolean(),
in.readBoolean(), in.readBoolean(), in.readBoolean(), in.readLong(),
- in.createTypedArrayList(ScanResult.InformationElement.CREATOR));
+ in.createTypedArrayList(ScanResult.InformationElement.CREATOR),
+ in.readParcelable(MacAddress.class.getClassLoader()));
}
@Override
@@ -897,6 +919,20 @@ public final class SoftApConfiguration implements Parcelable {
}
/**
+ * Returns the randomized MAC address to be used by this configuration.
+ *
+ * The Soft AP may be configured to use a persistent randomized MAC address with
+ * {@link Builder#setMacRandomizationSetting(int)}. This method returns the persistent
+ * randomized MAC address which will be used for the Soft AP controlled by this configuration.
+ *
+ * @hide
+ */
+ @SystemApi
+ public @NonNull MacAddress getPersistentRandomizedMacAddress() {
+ return mPersistentRandomizedMacAddress;
+ }
+
+ /**
* @hide
*/
public boolean isUserConfigurationInternal() {
@@ -1017,6 +1053,7 @@ public final class SoftApConfiguration implements Parcelable {
private boolean mIsUserConfiguration;
private long mBridgedModeOpportunisticShutdownTimeoutMillis;
private List<ScanResult.InformationElement> mVendorElements;
+ private MacAddress mPersistentRandomizedMacAddress;
/**
* Constructs a Builder with default values (see {@link Builder}).
@@ -1046,6 +1083,7 @@ public final class SoftApConfiguration implements Parcelable {
mIsUserConfiguration = true;
mBridgedModeOpportunisticShutdownTimeoutMillis = 0;
mVendorElements = new ArrayList<>();
+ mPersistentRandomizedMacAddress = null;
}
/**
@@ -1075,6 +1113,7 @@ public final class SoftApConfiguration implements Parcelable {
mBridgedModeOpportunisticShutdownTimeoutMillis =
other.mBridgedModeOpportunisticShutdownTimeoutMillis;
mVendorElements = new ArrayList<>(other.mVendorElements);
+ mPersistentRandomizedMacAddress = other.mPersistentRandomizedMacAddress;
}
/**
@@ -1089,13 +1128,22 @@ public final class SoftApConfiguration implements Parcelable {
throw new IllegalArgumentException("A MacAddress exist in both client list");
}
}
+
+ // mMacRandomizationSetting supported from S.
+ if (SdkLevel.isAtLeastS() && Compatibility.isChangeEnabled(
+ FORCE_MUTUAL_EXCLUSIVE_BSSID_MAC_RAMDONIZATION_SETTING)
+ && mBssid != null && mMacRandomizationSetting != RANDOMIZATION_NONE) {
+ throw new IllegalArgumentException("A BSSID had configured but MAC randomization"
+ + " setting is not NONE");
+ }
return new SoftApConfiguration(mWifiSsid, mBssid, mPassphrase,
mHiddenSsid, mChannels, mSecurityType, mMaxNumberOfClients,
mAutoShutdownEnabled, mShutdownTimeoutMillis, mClientControlByUser,
mBlockedClientList, mAllowedClientList, mMacRandomizationSetting,
mBridgedModeOpportunisticShutdownEnabled, mIeee80211axEnabled,
mIeee80211beEnabled, mIsUserConfiguration,
- mBridgedModeOpportunisticShutdownTimeoutMillis, mVendorElements);
+ mBridgedModeOpportunisticShutdownTimeoutMillis, mVendorElements,
+ mPersistentRandomizedMacAddress);
}
/**
@@ -1185,6 +1233,9 @@ public final class SoftApConfiguration implements Parcelable {
* <p>
* <li>If not set, defaults to null.</li>
*
+ * When this method is called, the caller needs to configure MAC randomization settings to
+ * {@link #RANDOMIZATION_NONE}. See {@link #setMacRandomizationSetting(int)} for details.
+ *
* If multiple bands are requested via {@link #setBands(int[])} or
* {@link #setChannels(SparseIntArray)}, HAL will derive 2 MAC addresses since framework
* only sends down 1 MAC address.
@@ -1633,7 +1684,9 @@ public final class SoftApConfiguration implements Parcelable {
* The Soft AP BSSID will be randomized only if the BSSID isn't set
* {@link #setBssid(MacAddress)} and this method is either uncalled
* or called with {@link #RANDOMIZATION_PERSISTENT} or
- * {@link #RANDOMIZATION_NON_PERSISTENT}.
+ * {@link #RANDOMIZATION_NON_PERSISTENT}. When this method is called with
+ * {@link #RANDOMIZATION_PERSISTENT} or {@link #RANDOMIZATION_NON_PERSISTENT}, the caller
+ * the caller must not call {@link #setBssid(MacAddress)}.
*
* <p>
* <li>If not set, defaults to {@link #RANDOMIZATION_NON_PERSISTENT}</li>
@@ -1804,5 +1857,19 @@ public final class SoftApConfiguration implements Parcelable {
mBridgedModeOpportunisticShutdownTimeoutMillis = timeoutMillis;
return this;
}
+
+ /**
+ * @param mac persistent randomized MacAddress generated by the frameworks.
+ * @hide
+ */
+ @NonNull
+ public Builder setRandomizedMacAddress(@NonNull MacAddress mac) {
+ if (mac == null) {
+ throw new IllegalArgumentException("setRandomizedMacAddress received"
+ + " null MacAddress.");
+ }
+ mPersistentRandomizedMacAddress = mac;
+ return this;
+ }
}
}
diff --git a/framework/tests/src/android/net/wifi/SoftApConfigurationTest.java b/framework/tests/src/android/net/wifi/SoftApConfigurationTest.java
index 59e06a9f2d..b801219d18 100644
--- a/framework/tests/src/android/net/wifi/SoftApConfigurationTest.java
+++ b/framework/tests/src/android/net/wifi/SoftApConfigurationTest.java
@@ -20,6 +20,7 @@ import static android.net.wifi.ScanResult.InformationElement.EID_VSA;
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
@@ -95,17 +96,16 @@ public class SoftApConfigurationTest {
String utf8Ssid = "ssid";
SoftApConfiguration original = new SoftApConfiguration.Builder()
.setSsid(utf8Ssid)
- .setBssid(testBssid)
.build();
assertThat(original.getSsid()).isEqualTo(utf8Ssid);
assertThat(original.getWifiSsid()).isEqualTo(WifiSsid.fromUtf8Text(utf8Ssid));
- assertThat(original.getBssid()).isEqualTo(testBssid);
assertThat(original.getPassphrase()).isNull();
assertThat(original.getSecurityType()).isEqualTo(SoftApConfiguration.SECURITY_TYPE_OPEN);
assertThat(original.getBand()).isEqualTo(SoftApConfiguration.BAND_2GHZ);
assertThat(original.getChannel()).isEqualTo(0);
assertThat(original.isHiddenSsid()).isEqualTo(false);
assertThat(original.getMaxNumberOfClients()).isEqualTo(0);
+ assertThat(original.getPersistentRandomizedMacAddress()).isNull();
if (SdkLevel.isAtLeastS()) {
assertThat(original.isBridgedModeOpportunisticShutdownEnabled())
.isEqualTo(true);
@@ -195,6 +195,7 @@ public class SoftApConfigurationTest {
@Test
public void testWpa2WithAllFieldCustomized() {
+ MacAddress testRandomizedMacAddress = MacAddress.fromString(TEST_BSSID);
List<MacAddress> testBlockedClientList = new ArrayList<>();
List<MacAddress> testAllowedClientList = new ArrayList<>();
testBlockedClientList.add(MacAddress.fromString("11:22:33:44:55:66"));
@@ -208,7 +209,8 @@ public class SoftApConfigurationTest {
.setShutdownTimeoutMillis(500000)
.setClientControlByUserEnabled(true)
.setBlockedClientList(testBlockedClientList)
- .setAllowedClientList(testAllowedClientList);
+ .setAllowedClientList(testAllowedClientList)
+ .setRandomizedMacAddress(testRandomizedMacAddress);
if (SdkLevel.isAtLeastS()) {
originalBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
originalBuilder.setBridgedModeOpportunisticShutdownEnabled(false);
@@ -234,6 +236,8 @@ public class SoftApConfigurationTest {
assertThat(original.isClientControlByUserEnabled()).isEqualTo(true);
assertThat(original.getBlockedClientList()).isEqualTo(testBlockedClientList);
assertThat(original.getAllowedClientList()).isEqualTo(testAllowedClientList);
+ assertThat(original.getPersistentRandomizedMacAddress())
+ .isEqualTo(testRandomizedMacAddress);
if (SdkLevel.isAtLeastS()) {
assertThat(original.getMacRandomizationSetting())
.isEqualTo(SoftApConfiguration.RANDOMIZATION_NONE);
@@ -636,4 +640,43 @@ public class SoftApConfigurationTest {
.setVendorElements(dupElements)
.build();
}
+
+ @Test
+ // TODO: b/216875688 enable it after updating target SDK build version
+ // (expected = IllegalArgumentException.class)
+ public void testThrowsExceptionWhenBssidSetButMacRandomizationSettingIsPersistent() {
+ assumeTrue(SdkLevel.isAtLeastS());
+ MacAddress testBssid = MacAddress.fromString(TEST_BSSID);
+ SoftApConfiguration config_setBssidAfterSetMacRandomizationSettingToPersistent =
+ new SoftApConfiguration.Builder()
+ .setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_PERSISTENT)
+ .setBssid(testBssid)
+ .build();
+ }
+
+ @Test
+ // TODO: b/216875688 enable it after updating target SDK build version
+ // (expected = IllegalArgumentException.class)
+ public void testThrowsExceptionWhenBssidSetButMacRandomizationSettingIsNonPersistent() {
+ assumeTrue(SdkLevel.isAtLeastS());
+ MacAddress testBssid = MacAddress.fromString(TEST_BSSID);
+ SoftApConfiguration config_setBssidAfterSetMacRandomizationSettingToNonPersistent =
+ new SoftApConfiguration.Builder()
+ .setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NON_PERSISTENT)
+ .setBssid(testBssid)
+ .build();
+ }
+
+ @Test
+ public void testSetBssidSucceededWWithDisableMacRandomizationSetting() {
+ assumeTrue(SdkLevel.isAtLeastS());
+ MacAddress testBssid = MacAddress.fromString(TEST_BSSID);
+ SoftApConfiguration config_setBssidAfterSetMacRandomizationSettingToNone =
+ new SoftApConfiguration.Builder()
+ .setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE)
+ .setBssid(testBssid)
+ .build();
+ assertEquals(config_setBssidAfterSetMacRandomizationSettingToNone.getBssid(),
+ testBssid);
+ }
}
diff --git a/service/java/com/android/server/wifi/WifiApConfigStore.java b/service/java/com/android/server/wifi/WifiApConfigStore.java
index 4c65ab9f36..fde0f76c0b 100644
--- a/service/java/com/android/server/wifi/WifiApConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiApConfigStore.java
@@ -142,6 +142,7 @@ public class WifiApConfigStore {
Log.d(TAG, "persisted config was converted, need to resave it");
persistConfigAndTriggerBackupManagerProxy(sanitizedPersistentconfig);
}
+
if (mForceApChannel) {
Log.d(TAG, "getApConfiguration: Band force to " + mForcedApBand
+ ", and channel force to " + mForcedApChannel);
@@ -151,7 +152,7 @@ public class WifiApConfigStore {
: new SoftApConfiguration.Builder(mPersistentWifiApConfig)
.setChannel(mForcedApChannel, mForcedApBand).build();
}
- return mPersistentWifiApConfig;
+ return updatePersistentRandomizedMacAddress(mPersistentWifiApConfig);
}
/**
@@ -451,12 +452,11 @@ public class WifiApConfigStore {
configBuilder.setBand(SoftApConfiguration.BAND_5GHZ);
}
}
-
if (customConfig == null || customConfig.getSsid() == null) {
configBuilder.setSsid(generateLohsSsid(context));
}
- return configBuilder.build();
+ return updatePersistentRandomizedMacAddress(configBuilder.build());
}
/**
@@ -484,6 +484,9 @@ public class WifiApConfigStore {
macAddress = MacAddressUtils.createRandomUnicastAddress();
}
configBuilder.setBssid(macAddress);
+ if (macAddress != null && SdkLevel.isAtLeastS()) {
+ configBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
+ }
}
return configBuilder.build();
}
@@ -643,4 +646,14 @@ public class WifiApConfigStore {
public void disableForceSoftApBandOrChannel() {
mForceApChannel = false;
}
+
+ private SoftApConfiguration updatePersistentRandomizedMacAddress(SoftApConfiguration config) {
+ // Update randomized MacAddress
+ WifiSsid ssid = config.getWifiSsid();
+ MacAddress randomizedMacAddress = mMacAddressUtil.calculatePersistentMac(
+ ssid != null ? ssid.toString() : null,
+ mMacAddressUtil.obtainMacRandHashFunctionForSap(Process.WIFI_UID));
+ return new SoftApConfiguration.Builder(config)
+ .setRandomizedMacAddress(randomizedMacAddress).build();
+ }
}
diff --git a/service/java/com/android/server/wifi/util/XmlUtil.java b/service/java/com/android/server/wifi/util/XmlUtil.java
index afd9e318d4..7b954fd1d1 100644
--- a/service/java/com/android/server/wifi/util/XmlUtil.java
+++ b/service/java/com/android/server/wifi/util/XmlUtil.java
@@ -2072,6 +2072,11 @@ public class XmlUtil {
migrationData.isSoftApTimeoutEnabled());
}
}
+ if (bssid != null && SdkLevel.isAtLeastS()) {
+ // Force MAC randomization setting to none when BSSID is configured
+ softApConfigBuilder.setMacRandomizationSetting(
+ SoftApConfiguration.RANDOMIZATION_NONE);
+ }
} catch (IllegalArgumentException e) {
Log.e(TAG, "Failed to parse configuration " + e);
return null;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
index c00bede8eb..dd97decfe0 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
@@ -1846,6 +1846,9 @@ public class SoftApManagerTest extends WifiBaseTest {
configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
configBuilder.setSsid(TEST_SSID);
configBuilder.setBssid(TEST_CLIENT_MAC_ADDRESS);
+ if (SdkLevel.isAtLeastS()) {
+ configBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
+ }
SoftApModeConfiguration apConfig = new SoftApModeConfiguration(
IFACE_IP_MODE_LOCAL_ONLY, configBuilder.build(), mTestSoftApCapability);
ArgumentCaptor<MacAddress> mac = ArgumentCaptor.forClass(MacAddress.class);
@@ -1863,6 +1866,9 @@ public class SoftApManagerTest extends WifiBaseTest {
configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
configBuilder.setSsid(TEST_SSID);
configBuilder.setBssid(TEST_CLIENT_MAC_ADDRESS);
+ if (SdkLevel.isAtLeastS()) {
+ configBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
+ }
SoftApModeConfiguration apConfig = new SoftApModeConfiguration(
IFACE_IP_MODE_LOCAL_ONLY, configBuilder.build(), mTestSoftApCapability);
ArgumentCaptor<MacAddress> mac = ArgumentCaptor.forClass(MacAddress.class);
@@ -1881,6 +1887,9 @@ public class SoftApManagerTest extends WifiBaseTest {
configBuilder.setBand(SoftApConfiguration.BAND_2GHZ);
configBuilder.setSsid(TEST_SSID);
configBuilder.setBssid(TEST_CLIENT_MAC_ADDRESS);
+ if (SdkLevel.isAtLeastS()) {
+ configBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
+ }
SoftApModeConfiguration apConfig = new SoftApModeConfiguration(
IFACE_IP_MODE_LOCAL_ONLY, configBuilder.build(), mTestSoftApCapability);
ArgumentCaptor<MacAddress> mac = ArgumentCaptor.forClass(MacAddress.class);
@@ -1896,9 +1905,14 @@ public class SoftApManagerTest extends WifiBaseTest {
@Test
public void setMacFailureWhenRandomMac() throws Exception {
- SoftApConfiguration randomizedBssidConfig =
+ SoftApConfiguration.Builder randomizedBssidConfigBuilder =
new SoftApConfiguration.Builder(mDefaultApConfig)
- .setBssid(TEST_CLIENT_MAC_ADDRESS).build();
+ .setBssid(TEST_CLIENT_MAC_ADDRESS);
+ if (SdkLevel.isAtLeastS()) {
+ randomizedBssidConfigBuilder.setMacRandomizationSetting(
+ SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ SoftApConfiguration randomizedBssidConfig = randomizedBssidConfigBuilder.build();
when(mWifiApConfigStore.randomizeBssidIfUnset(any(), any())).thenReturn(
randomizedBssidConfig);
SoftApModeConfiguration apConfig = new SoftApModeConfiguration(
@@ -2029,9 +2043,14 @@ public class SoftApManagerTest extends WifiBaseTest {
if (expectedConfig == null) {
if (config == null) {
// Only generate randomized mac for default config since test case doesn't care it.
- randomizedBssidConfig =
+ SoftApConfiguration.Builder randomizedBssidConfigBuilder =
new SoftApConfiguration.Builder(mDefaultApConfig)
- .setBssid(TEST_INTERFACE_MAC_ADDRESS).build();
+ .setBssid(TEST_INTERFACE_MAC_ADDRESS);
+ if (SdkLevel.isAtLeastS()) {
+ randomizedBssidConfigBuilder.setMacRandomizationSetting(
+ SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ randomizedBssidConfig = randomizedBssidConfigBuilder.build();
when(mWifiApConfigStore.randomizeBssidIfUnset(any(), any())).thenReturn(
randomizedBssidConfig);
expectedConfig = new SoftApConfiguration.Builder(randomizedBssidConfig)
@@ -2415,8 +2434,13 @@ public class SoftApManagerTest extends WifiBaseTest {
@Test
public void testBssidUpdatedWhenSoftApInfoUpdate() throws Exception {
MacAddress testBssid = MacAddress.fromString("aa:bb:cc:11:22:33");
- SoftApConfiguration customizedBssidConfig = new SoftApConfiguration
- .Builder(mDefaultApConfig).setBssid(testBssid).build();
+ SoftApConfiguration.Builder customizedBssidConfigBuilder = new SoftApConfiguration
+ .Builder(mDefaultApConfig).setBssid(testBssid);
+ if (SdkLevel.isAtLeastS()) {
+ customizedBssidConfigBuilder.setMacRandomizationSetting(
+ SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ SoftApConfiguration customizedBssidConfig = customizedBssidConfigBuilder.build();
when(mWifiNative.setApMacAddress(eq(TEST_INTERFACE_NAME), eq(testBssid))).thenReturn(true);
mTestSoftApInfo.setBssid(testBssid);
InOrder order = inOrder(mCallback, mWifiMetrics);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
index 198eb3584e..0eba844b62 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiApConfigStoreTest.java
@@ -636,9 +636,13 @@ public class WifiApConfigStoreTest extends WifiBaseTest {
@Test
public void generateLohsConfig_forwardsCustomMac() throws Exception {
WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration customConfig = new SoftApConfiguration.Builder()
- .setBssid(TEST_SAP_BSSID_MAC)
- .build();
+ SoftApConfiguration.Builder customConfigBuilder = new SoftApConfiguration.Builder()
+ .setBssid(TEST_SAP_BSSID_MAC);
+ if (SdkLevel.isAtLeastS()) {
+ customConfigBuilder.setMacRandomizationSetting(
+ SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ SoftApConfiguration customConfig = customConfigBuilder.build();
SoftApConfiguration softApConfig = store.generateLocalOnlyHotspotConfig(
mContext, customConfig, mSoftApCapability);
assertThat(softApConfig.getBssid().toString()).isNotEmpty();
@@ -716,6 +720,9 @@ public class WifiApConfigStoreTest extends WifiBaseTest {
mResources.setBoolean(R.bool.config_wifi_ap_mac_randomization_supported, true);
Builder baseConfigBuilder = new SoftApConfiguration.Builder();
baseConfigBuilder.setBssid(TEST_SAP_BSSID_MAC);
+ if (SdkLevel.isAtLeastS()) {
+ baseConfigBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
+ }
WifiApConfigStore store = createWifiApConfigStore();
SoftApConfiguration config = store.randomizeBssidIfUnset(mContext,
@@ -1104,9 +1111,14 @@ public class WifiApConfigStoreTest extends WifiBaseTest {
@Test
public void testBssidDenyIfCallerWithoutPrivileged() throws Exception {
WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = new SoftApConfiguration.Builder(store.getApConfiguration())
- .setBssid(TEST_SAP_BSSID_MAC).build();
- assertFalse(WifiApConfigStore.validateApWifiConfiguration(config, false, mContext));
+ SoftApConfiguration.Builder configBuilder =
+ new SoftApConfiguration.Builder(store.getApConfiguration())
+ .setBssid(TEST_SAP_BSSID_MAC);
+ if (SdkLevel.isAtLeastS()) {
+ configBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ assertFalse(WifiApConfigStore.validateApWifiConfiguration(configBuilder.build(),
+ false, mContext));
}
/**
@@ -1115,9 +1127,14 @@ public class WifiApConfigStoreTest extends WifiBaseTest {
@Test
public void testBssidAllowIfCallerOwnPrivileged() throws Exception {
WifiApConfigStore store = createWifiApConfigStore();
- SoftApConfiguration config = new SoftApConfiguration.Builder(store.getApConfiguration())
- .setBssid(TEST_SAP_BSSID_MAC).build();
- assertTrue(WifiApConfigStore.validateApWifiConfiguration(config, true, mContext));
+ SoftApConfiguration.Builder configBuilder =
+ new SoftApConfiguration.Builder(store.getApConfiguration())
+ .setBssid(TEST_SAP_BSSID_MAC);
+ if (SdkLevel.isAtLeastS()) {
+ configBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ assertTrue(WifiApConfigStore.validateApWifiConfiguration(configBuilder.build(),
+ true, mContext));
}
@Test
@@ -1273,4 +1290,13 @@ public class WifiApConfigStoreTest extends WifiBaseTest {
verifyUpgradeConfiguration(store, true, false);
verifyUpgradeConfiguration(store, false, false);
}
+
+ @Test
+ public void testRandomizedMacAddress() throws Exception {
+ WifiApConfigStore store = createWifiApConfigStore();
+ assertNotNull(store.getApConfiguration().getPersistentRandomizedMacAddress());
+ assertNotNull(store.generateLocalOnlyHotspotConfig(mContext, null, mSoftApCapability));
+ assertNotNull(store.generateLocalOnlyHotspotConfig(mContext, store.getApConfiguration(),
+ mSoftApCapability));
+ }
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index 86980d0032..688978759f 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -3430,9 +3430,14 @@ public class WifiServiceImplTest extends WifiBaseTest {
public void testCustomLohs_ForwardsBssid() {
mLooper.startAutoDispatch();
SoftApConfiguration lohsConfig = createValidSoftApConfiguration();
- SoftApConfiguration customizedConfig = new SoftApConfiguration.Builder(lohsConfig)
- .setBssid(MacAddress.fromString("aa:bb:cc:dd:ee:ff"))
- .build();
+ SoftApConfiguration.Builder customizedConfigBuilder =
+ new SoftApConfiguration.Builder(lohsConfig)
+ .setBssid(MacAddress.fromString("aa:bb:cc:dd:ee:ff"));
+ if (SdkLevel.isAtLeastS()) {
+ customizedConfigBuilder.setMacRandomizationSetting(
+ SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ SoftApConfiguration customizedConfig = customizedConfigBuilder.build();
when(mWifiApConfigStore.generateLocalOnlyHotspotConfig(
eq(mContext), eq(customizedConfig), any()))
.thenReturn(customizedConfig);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/util/ApConfigUtilTest.java b/service/tests/wifitests/src/com/android/server/wifi/util/ApConfigUtilTest.java
index acdbbb2fca..5145f249a0 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/util/ApConfigUtilTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/util/ApConfigUtilTest.java
@@ -660,9 +660,15 @@ public class ApConfigUtilTest extends WifiBaseTest {
assertTrue(ApConfigUtil.checkConfigurationChangeNeedToRestart(currentConfig,
newConfig_ssidChanged));
// Test BSSID changed
- SoftApConfiguration newConfig_bssidChanged = new SoftApConfiguration
+ SoftApConfiguration.Builder newConfig_bssidChangedBuilder = new SoftApConfiguration
.Builder(newConfig_noChange)
- .setBssid(testBssid).build();
+ .setBssid(testBssid);
+
+ if (SdkLevel.isAtLeastS()) {
+ newConfig_bssidChangedBuilder.setMacRandomizationSetting(
+ SoftApConfiguration.RANDOMIZATION_NONE);
+ }
+ SoftApConfiguration newConfig_bssidChanged = newConfig_bssidChangedBuilder.build();
assertTrue(ApConfigUtil.checkConfigurationChangeNeedToRestart(currentConfig,
newConfig_bssidChanged));
// Test Passphrase Changed