summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/HostapdHalAidlImp.java5
-rw-r--r--service/java/com/android/server/wifi/HostapdHalHidlImp.java1
-rw-r--r--service/java/com/android/server/wifi/SoftApManager.java6
-rw-r--r--service/java/com/android/server/wifi/WifiNative.java8
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/HostapdHalAidlImpTest.java27
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/HostapdHalHidlImpTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java5
7 files changed, 37 insertions, 19 deletions
diff --git a/service/java/com/android/server/wifi/HostapdHalAidlImp.java b/service/java/com/android/server/wifi/HostapdHalAidlImp.java
index 32c637630e..b8f4ef2fe3 100644
--- a/service/java/com/android/server/wifi/HostapdHalAidlImp.java
+++ b/service/java/com/android/server/wifi/HostapdHalAidlImp.java
@@ -422,7 +422,10 @@ public class HostapdHalAidlImp implements IHostapdHal {
callback.onInfoChanged(info.apIfaceInstance, info.freqMhz,
mapHalChannelBandwidthToSoftApInfo(info.channelBandwidth),
mapHalGenerationToWifiStandard(info.generation),
- MacAddress.fromBytes(info.apIfaceInstanceMacAddress), vendorData);
+ MacAddress.fromBytes(info.apIfaceInstanceMacAddress),
+ (Flags.mloSap() && info.mldMacAddress != null)
+ ? MacAddress.fromBytes(info.mldMacAddress) : null,
+ vendorData);
}
mActiveInstances.add(info.apIfaceInstance);
} catch (IllegalArgumentException iae) {
diff --git a/service/java/com/android/server/wifi/HostapdHalHidlImp.java b/service/java/com/android/server/wifi/HostapdHalHidlImp.java
index 389624e6a7..4e675fdc45 100644
--- a/service/java/com/android/server/wifi/HostapdHalHidlImp.java
+++ b/service/java/com/android/server/wifi/HostapdHalHidlImp.java
@@ -1285,6 +1285,7 @@ public class HostapdHalHidlImp implements IHostapdHal {
mapHalBandwidthToSoftApInfo(bandwidth),
mapHalGenerationToWifiStandard(generation),
MacAddress.fromBytes(apIfaceInstanceMacAddress),
+ null,
Collections.emptyList());
}
} catch (IllegalArgumentException iae) {
diff --git a/service/java/com/android/server/wifi/SoftApManager.java b/service/java/com/android/server/wifi/SoftApManager.java
index 1f8c280582..73b499130f 100644
--- a/service/java/com/android/server/wifi/SoftApManager.java
+++ b/service/java/com/android/server/wifi/SoftApManager.java
@@ -328,7 +328,8 @@ public class SoftApManager implements ActiveModeManager {
public void onInfoChanged(String apIfaceInstance, int frequency,
@WifiAnnotations.Bandwidth int bandwidth,
@WifiAnnotations.WifiStandard int generation,
- MacAddress apIfaceInstanceMacAddress,
+ @Nullable MacAddress apIfaceInstanceMacAddress,
+ @Nullable MacAddress mldAddress,
@NonNull List<OuiKeyedData> vendorData) {
SoftApInfo apInfo = new SoftApInfo();
apInfo.setFrequency(frequency);
@@ -337,6 +338,9 @@ public class SoftApManager implements ActiveModeManager {
if (apIfaceInstanceMacAddress != null) {
apInfo.setBssid(apIfaceInstanceMacAddress);
}
+ if (mldAddress != null) {
+ apInfo.setMldAddress(mldAddress);
+ }
apInfo.setApInstanceIdentifier(apIfaceInstance != null
? apIfaceInstance : mApInterfaceName);
if (SdkLevel.isAtLeastV() && vendorData != null && !vendorData.isEmpty()) {
diff --git a/service/java/com/android/server/wifi/WifiNative.java b/service/java/com/android/server/wifi/WifiNative.java
index 26e1adc141..548255eb33 100644
--- a/service/java/com/android/server/wifi/WifiNative.java
+++ b/service/java/com/android/server/wifi/WifiNative.java
@@ -290,7 +290,7 @@ public class WifiNative {
@Override
public void onSoftApChannelSwitched(int frequency, int bandwidth) {
mSoftApHalCallback.onInfoChanged(mIfaceName, frequency, bandwidth,
- ScanResult.WIFI_STANDARD_UNKNOWN, null, Collections.emptyList());
+ ScanResult.WIFI_STANDARD_UNKNOWN, null, null, Collections.emptyList());
}
@Override
@@ -349,11 +349,15 @@ public class WifiNative {
* indication that the SoftAp is not enabled.
* @param bandwidth The new bandwidth of the SoftAp.
* @param generation The new generation of the SoftAp.
+ * @param apIfaceInstanceMacAddress MAC Address of the apIfaceInstance.
+ * @param mldMacAddress MAC Address of the multiple link device (MLD) which apIfaceInstance
+ * is associated with.
* @param vendorData List of {@link OuiKeyedData} containing vendor-specific configuration
* data, or empty list if not provided.
*/
void onInfoChanged(String apIfaceInstance, int frequency, int bandwidth,
- int generation, MacAddress apIfaceInstanceMacAddress,
+ int generation, @Nullable MacAddress apIfaceInstanceMacAddress,
+ @Nullable MacAddress mldMacAddress,
@NonNull List<OuiKeyedData> vendorData);
/**
* Invoked when there is a change in the associated station (STA).
diff --git a/service/tests/wifitests/src/com/android/server/wifi/HostapdHalAidlImpTest.java b/service/tests/wifitests/src/com/android/server/wifi/HostapdHalAidlImpTest.java
index 0055781812..ffc9446327 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/HostapdHalAidlImpTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/HostapdHalAidlImpTest.java
@@ -107,6 +107,7 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
private static final String TEST_CLIENT_MAC = "11:22:33:44:55:66";
private static final String TEST_AP_INSTANCE = "instance-wlan0";
private static final String TEST_AP_INSTANCE_2 = "instance-wlan1";
+ private static final String TEST_MLD_MAC = "aa:bb:cc:dd:ee:ff";
private static final int TEST_FREQ_24G = 2412;
private static final int TEST_FREQ_5G = 5745;
private static final int TEST_BANDWIDTH = ChannelBandwidth.BANDWIDTH_20;
@@ -167,7 +168,7 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
private void mockApInfoChangedAndVerify(String ifaceName, int numOfApInfo,
IHostapdCallback mockHostapdCallback,
- WifiNative.SoftApHalCallback mockSoftApHalCallback) throws Exception {
+ WifiNative.SoftApHalCallback mockSoftApHalCallback, boolean isMLD) throws Exception {
// Trigger on info changed.
ApInfo apInfo = new ApInfo();
apInfo.ifaceName = ifaceName;
@@ -176,12 +177,16 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
apInfo.channelBandwidth = TEST_BANDWIDTH;
apInfo.generation = TEST_GENERATION;
apInfo.apIfaceInstanceMacAddress = MacAddress.fromString(TEST_CLIENT_MAC).toByteArray();
+ if (isMLD) {
+ apInfo.mldMacAddress = MacAddress.fromString(TEST_MLD_MAC).toByteArray();
+ }
if (numOfApInfo == 1) {
mockHostapdCallback.onApInstanceInfoChanged(apInfo);
verify(mockSoftApHalCallback).onInfoChanged(eq(TEST_AP_INSTANCE), eq(TEST_FREQ_24G),
eq(mHostapdHal.mapHalChannelBandwidthToSoftApInfo(TEST_BANDWIDTH)),
eq(mHostapdHal.mapHalGenerationToWifiStandard(TEST_GENERATION)),
- eq(MacAddress.fromString(TEST_CLIENT_MAC)), anyList());
+ eq(MacAddress.fromString(TEST_CLIENT_MAC)),
+ isMLD ? eq(MacAddress.fromString(TEST_MLD_MAC)) : eq(null), anyList());
} else if (numOfApInfo == 2) {
apInfo.apIfaceInstance = TEST_AP_INSTANCE_2;
apInfo.freqMhz = TEST_FREQ_5G;
@@ -189,7 +194,8 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
verify(mockSoftApHalCallback).onInfoChanged(eq(TEST_AP_INSTANCE_2), eq(TEST_FREQ_5G),
eq(mHostapdHal.mapHalChannelBandwidthToSoftApInfo(TEST_BANDWIDTH)),
eq(mHostapdHal.mapHalGenerationToWifiStandard(TEST_GENERATION)),
- eq(MacAddress.fromString(TEST_CLIENT_MAC)), anyList());
+ eq(MacAddress.fromString(TEST_CLIENT_MAC)),
+ isMLD ? eq(MacAddress.fromString(TEST_MLD_MAC)) : eq(null), anyList());
}
}
@@ -208,7 +214,7 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
mResources.setString(R.string.config_wifiSoftap2gChannelList, "");
mResources.setString(R.string.config_wifiSoftap5gChannelList, "");
mResources.setString(R.string.config_wifiSoftap6gChannelList, "");
-
+ when(Flags.mloSap()).thenReturn(true);
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getResourceCache()).thenReturn(new WifiResourceCache(mContext));
doNothing().when(mIHostapdMock).addAccessPoint(
@@ -923,9 +929,9 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
verify(mSoftApHalCallback1, never()).onFailure();
// Trigger on info changed and verify.
- mockApInfoChangedAndVerify(IFACE_NAME, 1, mIHostapdCallback, mSoftApHalCallback);
+ mockApInfoChangedAndVerify(IFACE_NAME, 1, mIHostapdCallback, mSoftApHalCallback, false);
verify(mSoftApHalCallback1, never()).onInfoChanged(anyString(), anyInt(), anyInt(),
- anyInt(), any(), anyList());
+ anyInt(), any(), any(), anyList());
// Trigger on client connected.
ClientInfo clientInfo = new ClientInfo();
@@ -1223,7 +1229,7 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
* Verifies the onFailure event in bridged mode.
*/
@Test
- public void testHostapdCallbackOnFailureEventInBridgedMode() throws Exception {
+ public void testHostapdCallbackOnFailureEventInMldBridgedMode() throws Exception {
assumeTrue(SdkLevel.isAtLeastT());
executeAndValidateInitializationSequence(true);
Builder configurationBuilder = new SoftApConfiguration.Builder();
@@ -1241,8 +1247,8 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
mHostapdHal.registerApCallback(IFACE_NAME, mSoftApHalCallback);
// Trigger on info changed and verify.
- mockApInfoChangedAndVerify(IFACE_NAME, 1, mIHostapdCallback, mSoftApHalCallback);
- mockApInfoChangedAndVerify(IFACE_NAME, 2, mIHostapdCallback, mSoftApHalCallback);
+ mockApInfoChangedAndVerify(IFACE_NAME, 1, mIHostapdCallback, mSoftApHalCallback, true);
+ mockApInfoChangedAndVerify(IFACE_NAME, 2, mIHostapdCallback, mSoftApHalCallback, true);
// Trigger on instance failure from first instance.
mIHostapdCallback.onFailure(IFACE_NAME, TEST_AP_INSTANCE);
@@ -1275,7 +1281,7 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
mHostapdHal.registerApCallback(IFACE_NAME, mSoftApHalCallback);
// Trigger on info changed and verify.
- mockApInfoChangedAndVerify(IFACE_NAME, 1, mIHostapdCallback, mSoftApHalCallback);
+ mockApInfoChangedAndVerify(IFACE_NAME, 1, mIHostapdCallback, mSoftApHalCallback, false);
// Trigger on failure from first instance.
mIHostapdCallback.onFailure(IFACE_NAME, TEST_AP_INSTANCE);
@@ -1370,7 +1376,6 @@ public class HostapdHalAidlImpTest extends WifiBaseTest {
throws Exception {
assumeTrue(Environment.isSdkAtLeastB());
mResources.setBoolean(R.bool.config_wifi_softap_acs_supported, true);
- when(Flags.mloSap()).thenReturn(true);
when(Flags.apIsolate()).thenReturn(true);
when(mIHostapdMock.getInterfaceVersion()).thenReturn(3);
mHostapdHal = new HostapdHalSpy();
diff --git a/service/tests/wifitests/src/com/android/server/wifi/HostapdHalHidlImpTest.java b/service/tests/wifitests/src/com/android/server/wifi/HostapdHalHidlImpTest.java
index 0a2c12b7fa..ab45a35d76 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/HostapdHalHidlImpTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/HostapdHalHidlImpTest.java
@@ -1340,9 +1340,9 @@ public class HostapdHalHidlImpTest extends WifiBaseTest {
verify(mSoftApHalCallback).onInfoChanged(eq(TEST_AP_INSTANCE), eq(testFreq),
eq(mHostapdHal.mapHalBandwidthToSoftApInfo(testBandwidth)),
eq(mHostapdHal.mapHalGenerationToWifiStandard(testGeneration)),
- eq(MacAddress.fromString(TEST_CLIENT_MAC)), anyList());
+ eq(MacAddress.fromString(TEST_CLIENT_MAC)), eq(null), anyList());
verify(mSoftApHalCallback1, never()).onInfoChanged(anyString(), anyInt(), anyInt(),
- anyInt(), any(), anyList());
+ anyInt(), any(), any(), anyList());
// Trigger on client connected.
mIHostapdCallback13.onConnectedClientsChanged(IFACE_NAME, TEST_AP_INSTANCE,
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 aa11715c1c..ac7c0ce838 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/SoftApManagerTest.java
@@ -262,7 +262,7 @@ public class SoftApManagerTest extends WifiBaseTest {
/** Old callback event from wificond */
private void mockChannelSwitchEvent(int frequency, int bandwidth) {
mSoftApHalCallbackCaptor.getValue().onInfoChanged(
- TEST_INTERFACE_NAME, frequency, bandwidth, 0, null, Collections.emptyList());
+ TEST_INTERFACE_NAME, frequency, bandwidth, 0, null, null, Collections.emptyList());
}
/** New callback event from hostapd */
@@ -271,7 +271,8 @@ public class SoftApManagerTest extends WifiBaseTest {
? apInfo.getVendorData() : Collections.emptyList();
mSoftApHalCallbackCaptor.getValue().onInfoChanged(
apInfo.getApInstanceIdentifier(), apInfo.getFrequency(), apInfo.getBandwidth(),
- apInfo.getWifiStandardInternal(), apInfo.getBssidInternal(), vendorData);
+ apInfo.getWifiStandardInternal(), apInfo.getBssidInternal(),
+ apInfo.getMldAddress(), vendorData);
mTestSoftApInfoMap.put(apInfo.getApInstanceIdentifier(), apInfo);
mTestWifiClientsMap.put(apInfo.getApInstanceIdentifier(), new ArrayList<WifiClient>());
}