diff options
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>()); } |