Add codes for scan vendor ies support
Bug: 258285219 Test: atest android.net.wifi Change-Id: Ie8e7b18de0dc8ce9ce2263e5cc62168e241a0fc9
This commit is contained in:
@@ -9605,6 +9605,7 @@ package android.net.wifi.nl80211 {
|
||||
method public boolean tearDownInterfaces();
|
||||
method public boolean tearDownSoftApInterface(@NonNull String);
|
||||
method public void unregisterCountryCodeChangedListener(@NonNull android.net.wifi.nl80211.WifiNl80211Manager.CountryCodeChangedListener);
|
||||
field public static final String EXTRA_SCANNING_PARAM_VENDOR_IES = "android.net.wifi.nl80211.extra.SCANNING_PARAM_VENDOR_IES";
|
||||
field public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR = "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";
|
||||
field public static final int SCAN_TYPE_PNO_SCAN = 1; // 0x1
|
||||
field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -35,6 +36,7 @@ public class SingleScanSettings implements Parcelable {
|
||||
public boolean enable6GhzRnr;
|
||||
public ArrayList<ChannelSettings> channelSettings;
|
||||
public ArrayList<HiddenNetwork> hiddenNetworks;
|
||||
public byte[] vendorIes;
|
||||
|
||||
/** public constructor */
|
||||
public SingleScanSettings() { }
|
||||
@@ -53,13 +55,15 @@ public class SingleScanSettings implements Parcelable {
|
||||
return scanType == settings.scanType
|
||||
&& enable6GhzRnr == settings.enable6GhzRnr
|
||||
&& channelSettings.equals(settings.channelSettings)
|
||||
&& hiddenNetworks.equals(settings.hiddenNetworks);
|
||||
&& hiddenNetworks.equals(settings.hiddenNetworks)
|
||||
&& Arrays.equals(vendorIes, settings.vendorIes);
|
||||
}
|
||||
|
||||
/** override hash code */
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(scanType, channelSettings, hiddenNetworks, enable6GhzRnr);
|
||||
return Objects.hash(scanType, channelSettings, hiddenNetworks, enable6GhzRnr,
|
||||
Arrays.hashCode(vendorIes));
|
||||
}
|
||||
|
||||
|
||||
@@ -88,6 +92,11 @@ public class SingleScanSettings implements Parcelable {
|
||||
out.writeBoolean(enable6GhzRnr);
|
||||
out.writeTypedList(channelSettings);
|
||||
out.writeTypedList(hiddenNetworks);
|
||||
if (vendorIes == null) {
|
||||
out.writeByteArray(new byte[0]);
|
||||
} else {
|
||||
out.writeByteArray(vendorIes);
|
||||
}
|
||||
}
|
||||
|
||||
/** implement Parcelable interface */
|
||||
@@ -108,6 +117,10 @@ public class SingleScanSettings implements Parcelable {
|
||||
in.readTypedList(result.channelSettings, ChannelSettings.CREATOR);
|
||||
result.hiddenNetworks = new ArrayList<HiddenNetwork>();
|
||||
in.readTypedList(result.hiddenNetworks, HiddenNetwork.CREATOR);
|
||||
result.vendorIes = in.createByteArray();
|
||||
if (result.vendorIes == null) {
|
||||
result.vendorIes = new byte[0];
|
||||
}
|
||||
if (in.dataAvail() != 0) {
|
||||
Log.e(TAG, "Found trailing data after parcel parsing.");
|
||||
}
|
||||
|
||||
@@ -96,6 +96,10 @@ public class WifiNl80211Manager {
|
||||
public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR =
|
||||
"android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";
|
||||
|
||||
// Extra scanning parameter used to add vendor IEs (byte[]).
|
||||
public static final String EXTRA_SCANNING_PARAM_VENDOR_IES =
|
||||
"android.net.wifi.nl80211.extra.SCANNING_PARAM_VENDOR_IES";
|
||||
|
||||
private AlarmManager mAlarmManager;
|
||||
private Handler mEventHandler;
|
||||
|
||||
@@ -1135,6 +1139,7 @@ public class WifiNl80211Manager {
|
||||
settings.hiddenNetworks = new ArrayList<>();
|
||||
if (extraScanningParams != null) {
|
||||
settings.enable6GhzRnr = extraScanningParams.getBoolean(SCANNING_PARAM_ENABLE_6GHZ_RNR);
|
||||
settings.vendorIes = extraScanningParams.getByteArray(EXTRA_SCANNING_PARAM_VENDOR_IES);
|
||||
}
|
||||
|
||||
if (freqs != null) {
|
||||
|
||||
@@ -47,6 +47,7 @@ public class SingleScanSettingsTest {
|
||||
private ChannelSettings mChannelSettings2;
|
||||
private HiddenNetwork mHiddenNetwork1;
|
||||
private HiddenNetwork mHiddenNetwork2;
|
||||
private byte[] mVendorIes;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -59,6 +60,9 @@ public class SingleScanSettingsTest {
|
||||
mHiddenNetwork1.ssid = TEST_SSID_1;
|
||||
mHiddenNetwork2 = new HiddenNetwork();
|
||||
mHiddenNetwork2.ssid = TEST_SSID_2;
|
||||
|
||||
mVendorIes = new byte[]{(byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x11, 0x22, 0x33,
|
||||
(byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x44, 0x55, 0x66};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,12 +73,12 @@ public class SingleScanSettingsTest {
|
||||
public void canSerializeAndDeserialize() {
|
||||
SingleScanSettings scanSettings = new SingleScanSettings();
|
||||
scanSettings.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
|
||||
|
||||
scanSettings.channelSettings =
|
||||
new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
|
||||
scanSettings.hiddenNetworks =
|
||||
new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
|
||||
scanSettings.enable6GhzRnr = true;
|
||||
scanSettings.vendorIes = mVendorIes;
|
||||
|
||||
Parcel parcel = Parcel.obtain();
|
||||
scanSettings.writeToParcel(parcel, 0);
|
||||
@@ -98,6 +102,7 @@ public class SingleScanSettingsTest {
|
||||
new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
|
||||
scanSettings1.hiddenNetworks =
|
||||
new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
|
||||
scanSettings1.vendorIes = mVendorIes;
|
||||
|
||||
SingleScanSettings scanSettings2 = new SingleScanSettings();
|
||||
scanSettings2.scanType = IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY;
|
||||
@@ -105,6 +110,7 @@ public class SingleScanSettingsTest {
|
||||
new ArrayList<>(Arrays.asList(mChannelSettings1, mChannelSettings2));
|
||||
scanSettings2.hiddenNetworks =
|
||||
new ArrayList<>(Arrays.asList(mHiddenNetwork1, mHiddenNetwork2));
|
||||
scanSettings2.vendorIes = mVendorIes;
|
||||
|
||||
assertEquals(scanSettings1, scanSettings2);
|
||||
assertEquals(scanSettings1.hashCode(), scanSettings2.hashCode());
|
||||
|
||||
@@ -68,6 +68,7 @@ import java.nio.charset.CharsetDecoder;
|
||||
import java.nio.charset.CharsetEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -127,6 +128,9 @@ public class WifiNl80211ManagerTest {
|
||||
private static final String TEST_QUOTED_SSID_2 = "\"testSsid2\"";
|
||||
private static final int[] TEST_FREQUENCIES_1 = {};
|
||||
private static final int[] TEST_FREQUENCIES_2 = {2500, 5124};
|
||||
private static final byte[] TEST_VENDOR_IES =
|
||||
new byte[]{(byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x11, 0x22, 0x33,
|
||||
(byte) 0xdd, 0x7, 0x00, 0x50, (byte) 0xf2, 0x08, 0x44, 0x55, 0x66};
|
||||
private static final MacAddress TEST_RAW_MAC_BYTES = MacAddress.fromBytes(
|
||||
new byte[]{0x00, 0x01, 0x02, 0x03, 0x04, 0x05});
|
||||
|
||||
@@ -512,7 +516,7 @@ public class WifiNl80211ManagerTest {
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST));
|
||||
verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
|
||||
IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -523,12 +527,13 @@ public class WifiNl80211ManagerTest {
|
||||
when(mWifiScannerImpl.scan(any(SingleScanSettings.class))).thenReturn(true);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(WifiNl80211Manager.SCANNING_PARAM_ENABLE_6GHZ_RNR, true);
|
||||
bundle.putByteArray(WifiNl80211Manager.EXTRA_SCANNING_PARAM_VENDOR_IES, TEST_VENDOR_IES);
|
||||
assertTrue(mWificondControl.startScan(
|
||||
TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_LOW_POWER,
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, bundle));
|
||||
verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
|
||||
IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, true)));
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, true, TEST_VENDOR_IES)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -542,7 +547,7 @@ public class WifiNl80211ManagerTest {
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, null));
|
||||
verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
|
||||
IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -556,7 +561,7 @@ public class WifiNl80211ManagerTest {
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, new Bundle()));
|
||||
verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
|
||||
IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -577,7 +582,7 @@ public class WifiNl80211ManagerTest {
|
||||
// But the argument passed down should have the duplicate removed.
|
||||
verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
|
||||
IWifiScannerImpl.SCAN_TYPE_LOW_POWER,
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false)));
|
||||
SCAN_FREQ_SET, SCAN_HIDDEN_NETWORK_SSID_LIST, false, null)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -589,7 +594,7 @@ public class WifiNl80211ManagerTest {
|
||||
assertTrue(mWificondControl.startScan(
|
||||
TEST_INTERFACE_NAME, WifiScanner.SCAN_TYPE_HIGH_ACCURACY, null, null));
|
||||
verify(mWifiScannerImpl).scan(argThat(new ScanMatcher(
|
||||
IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null, false)));
|
||||
IWifiScannerImpl.SCAN_TYPE_HIGH_ACCURACY, null, null, false, null)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1161,13 +1166,15 @@ public class WifiNl80211ManagerTest {
|
||||
private final Set<Integer> mExpectedFreqs;
|
||||
private final List<byte[]> mExpectedSsids;
|
||||
private final boolean mExpectedEnable6GhzRnr;
|
||||
private final byte[] mExpectedVendorIes;
|
||||
|
||||
ScanMatcher(int expectedScanType, Set<Integer> expectedFreqs, List<byte[]> expectedSsids,
|
||||
boolean expectedEnable6GhzRnr) {
|
||||
boolean expectedEnable6GhzRnr, byte[] expectedVendorIes) {
|
||||
this.mExpectedScanType = expectedScanType;
|
||||
this.mExpectedFreqs = expectedFreqs;
|
||||
this.mExpectedSsids = expectedSsids;
|
||||
this.mExpectedEnable6GhzRnr = expectedEnable6GhzRnr;
|
||||
this.mExpectedVendorIes = expectedVendorIes;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1202,12 +1209,15 @@ public class WifiNl80211ManagerTest {
|
||||
if (!mExpectedSsids.equals(ssidSet)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (hiddenNetworks != null && hiddenNetworks.size() > 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Arrays.equals(mExpectedVendorIes, settings.vendorIes)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user