summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiao Ma <xiaom@google.com>2020-04-20 15:26:34 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-04-20 15:26:34 +0000
commit327e1b1dc7ae48980c7c9f59489cbf59f968afcf (patch)
tree4a01c74c3b9592fae71b40ad5feba94a200b9f20
parent64ff01eeec4a038ca9643f8a619232b553b070e4 (diff)
parent43cbcaea68608c3a3af129ad4ec972de8aafd5c4 (diff)
Get the l2key and grouphint from the initial provisioning configuration. am: 43cbcaea68
Change-Id: I0ebf0c476d48f0eaff383d73a7363fcbaf4023fd
-rw-r--r--common/moduleutils/src/android/net/shared/Layer2Information.java8
-rw-r--r--common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java16
-rw-r--r--common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ProvisioningConfigurationParcelable.aidl1
-rw-r--r--common/networkstackclient/src/android/net/ProvisioningConfigurationParcelable.aidl2
-rw-r--r--src/android/net/ip/IpClient.java19
-rw-r--r--tests/integration/src/android/net/ip/IpClientIntegrationTest.java22
-rw-r--r--tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java14
7 files changed, 52 insertions, 30 deletions
diff --git a/common/moduleutils/src/android/net/shared/Layer2Information.java b/common/moduleutils/src/android/net/shared/Layer2Information.java
index 77956a7..6825a93 100644
--- a/common/moduleutils/src/android/net/shared/Layer2Information.java
+++ b/common/moduleutils/src/android/net/shared/Layer2Information.java
@@ -23,9 +23,9 @@ import java.util.Objects;
/** @hide */
public class Layer2Information {
- private final String mL2Key;
- private final String mGroupHint;
- private final MacAddress mBssid;
+ public final String mL2Key;
+ public final String mGroupHint;
+ public final MacAddress mBssid;
/**
* Create a Layer2Information with the specified configuration.
@@ -60,7 +60,7 @@ public class Layer2Information {
* Create an instance of {@link Layer2Information} based on the contents of the specified
* {@link Layer2InformationParcelable}.
*/
- public Layer2Information fromStableParcelable(Layer2InformationParcelable p) {
+ public static Layer2Information fromStableParcelable(Layer2InformationParcelable p) {
if (p == null) return null;
return new Layer2Information(p.l2Key, p.groupHint, p.bssid);
}
diff --git a/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java b/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java
index c349fa7..9849eff 100644
--- a/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java
+++ b/common/moduleutils/src/android/net/shared/ProvisioningConfiguration.java
@@ -219,6 +219,14 @@ public class ProvisioningConfiguration {
}
/**
+ * Specify the L2 information(bssid, l2key and groupHint) that the IpClient should use.
+ */
+ public Builder withLayer2Information(Layer2Information layer2Info) {
+ mConfig.mLayer2Info = layer2Info;
+ return this;
+ }
+
+ /**
* Build the configuration using previously specified parameters.
*/
public ProvisioningConfiguration build() {
@@ -421,6 +429,7 @@ public class ProvisioningConfiguration {
public Network mNetwork = null;
public String mDisplayName = null;
public ScanResultInfo mScanResultInfo;
+ public Layer2Information mLayer2Info;
public ProvisioningConfiguration() {} // used by Builder
@@ -441,6 +450,7 @@ public class ProvisioningConfiguration {
mNetwork = other.mNetwork;
mDisplayName = other.mDisplayName;
mScanResultInfo = other.mScanResultInfo;
+ mLayer2Info = other.mLayer2Info;
}
/**
@@ -464,6 +474,7 @@ public class ProvisioningConfiguration {
p.network = mNetwork;
p.displayName = mDisplayName;
p.scanResultInfo = mScanResultInfo == null ? null : mScanResultInfo.toStableParcelable();
+ p.layer2Info = mLayer2Info == null ? null : mLayer2Info.toStableParcelable();
return p;
}
@@ -490,6 +501,7 @@ public class ProvisioningConfiguration {
config.mNetwork = p.network;
config.mDisplayName = p.displayName;
config.mScanResultInfo = ScanResultInfo.fromStableParcelable(p.scanResultInfo);
+ config.mLayer2Info = Layer2Information.fromStableParcelable(p.layer2Info);
return config;
}
@@ -510,6 +522,7 @@ public class ProvisioningConfiguration {
.add("mNetwork: " + mNetwork)
.add("mDisplayName: " + mDisplayName)
.add("mScanResultInfo: " + mScanResultInfo)
+ .add("mLayer2Info: " + mLayer2Info)
.toString();
}
@@ -530,7 +543,8 @@ public class ProvisioningConfiguration {
&& mIPv6AddrGenMode == other.mIPv6AddrGenMode
&& Objects.equals(mNetwork, other.mNetwork)
&& Objects.equals(mDisplayName, other.mDisplayName)
- && Objects.equals(mScanResultInfo, other.mScanResultInfo);
+ && Objects.equals(mScanResultInfo, other.mScanResultInfo)
+ && Objects.equals(mLayer2Info, other.mLayer2Info);
}
public boolean isValid() {
diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ProvisioningConfigurationParcelable.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ProvisioningConfigurationParcelable.aidl
index ca8bf6e..b789e5f 100644
--- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ProvisioningConfigurationParcelable.aidl
+++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ProvisioningConfigurationParcelable.aidl
@@ -31,4 +31,5 @@ parcelable ProvisioningConfigurationParcelable {
String displayName;
boolean enablePreconnection;
android.net.ScanResultInfoParcelable scanResultInfo;
+ android.net.Layer2InformationParcelable layer2Info;
}
diff --git a/common/networkstackclient/src/android/net/ProvisioningConfigurationParcelable.aidl b/common/networkstackclient/src/android/net/ProvisioningConfigurationParcelable.aidl
index 9fcb036..9bf4197 100644
--- a/common/networkstackclient/src/android/net/ProvisioningConfigurationParcelable.aidl
+++ b/common/networkstackclient/src/android/net/ProvisioningConfigurationParcelable.aidl
@@ -18,6 +18,7 @@
package android.net;
import android.net.InitialConfigurationParcelable;
+import android.net.Layer2InformationParcelable;
import android.net.Network;
import android.net.ScanResultInfoParcelable;
import android.net.StaticIpConfiguration;
@@ -38,4 +39,5 @@ parcelable ProvisioningConfigurationParcelable {
String displayName;
boolean enablePreconnection;
ScanResultInfoParcelable scanResultInfo;
+ Layer2InformationParcelable layer2Info;
}
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java
index 3fb5001..79ceee7 100644
--- a/src/android/net/ip/IpClient.java
+++ b/src/android/net/ip/IpClient.java
@@ -794,6 +794,11 @@ public class IpClient extends StateMachine {
+ " in provisioning configuration", e);
}
}
+
+ if (req.mLayer2Info != null) {
+ mL2Key = req.mLayer2Info.mL2Key;
+ mGroupHint = req.mLayer2Info.mGroupHint;
+ }
sendMessage(CMD_START, new android.net.shared.ProvisioningConfiguration(req));
}
@@ -904,7 +909,7 @@ public class IpClient extends StateMachine {
}
/**
- * Update the network bssid, L2Key and GroupHint layer2 information.
+ * Update the network bssid, L2Key and GroupHint on L2 roaming happened.
*/
public void updateLayer2Information(@NonNull Layer2InformationParcelable info) {
sendMessage(CMD_UPDATE_L2INFORMATION, info);
@@ -1534,10 +1539,10 @@ public class IpClient extends StateMachine {
mL2Key = info.l2Key;
mGroupHint = info.groupHint;
- // This means IpClient is still in the StoppedState, WiFi is trying to associate
- // to the AP, just update L2Key and GroupHint at this stage, because these members
- // will be used when starting DhcpClient.
- if (info.bssid == null || mCurrentBssid == null) return;
+ if (info.bssid == null || mCurrentBssid == null) {
+ Log.wtf(mTag, "bssid in the parcelable or current tracked bssid should be non-null");
+ return;
+ }
// If the BSSID has not changed, there is nothing to do.
if (info.bssid.equals(mCurrentBssid)) return;
@@ -1613,10 +1618,6 @@ public class IpClient extends StateMachine {
break;
}
- case CMD_UPDATE_L2INFORMATION:
- handleUpdateL2Information((Layer2InformationParcelable) msg.obj);
- break;
-
case CMD_SET_MULTICAST_FILTER:
mMulticastFiltering = (boolean) msg.obj;
break;
diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
index ac59000..334ac00 100644
--- a/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
+++ b/tests/integration/src/android/net/ip/IpClientIntegrationTest.java
@@ -105,6 +105,7 @@ import android.net.ipmemorystore.NetworkAttributes;
import android.net.ipmemorystore.OnNetworkAttributesRetrievedListener;
import android.net.ipmemorystore.Status;
import android.net.netlink.StructNdOptPref64;
+import android.net.shared.Layer2Information;
import android.net.shared.ProvisioningConfiguration;
import android.net.shared.ProvisioningConfiguration.ScanResultInfo;
import android.net.util.InterfaceParams;
@@ -530,27 +531,20 @@ public class IpClientIntegrationTest {
final boolean isHostnameConfigurationEnabled, final String hostname,
final String displayName, final ScanResultInfo scanResultInfo)
throws RemoteException {
- ProvisioningConfiguration.Builder builder = new ProvisioningConfiguration.Builder()
+ ProvisioningConfiguration.Builder prov = new ProvisioningConfiguration.Builder()
.withoutIpReachabilityMonitor()
+ .withLayer2Information(new Layer2Information(TEST_L2KEY, TEST_GROUPHINT,
+ MacAddress.fromString(TEST_DEFAULT_BSSID)))
.withoutIPv6();
- if (isPreconnectionEnabled) builder.withPreconnection();
- if (displayName != null) builder.withDisplayName(displayName);
- if (scanResultInfo != null) builder.withScanResultInfo(scanResultInfo);
+ if (isPreconnectionEnabled) prov.withPreconnection();
+ if (displayName != null) prov.withDisplayName(displayName);
+ if (scanResultInfo != null) prov.withScanResultInfo(scanResultInfo);
mDependencies.setDhcpLeaseCacheEnabled(isDhcpLeaseCacheEnabled);
mDependencies.setDhcpRapidCommitEnabled(shouldReplyRapidCommitAck);
mDependencies.setDhcpIpConflictDetectEnabled(isDhcpIpConflictDetectEnabled);
mDependencies.setHostnameConfiguration(isHostnameConfigurationEnabled, hostname);
-
- if (ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q)) {
- final Layer2InformationParcelable info = new Layer2InformationParcelable();
- info.l2Key = TEST_L2KEY;
- info.groupHint = TEST_GROUPHINT;
- mIpc.updateLayer2Information(info);
- } else {
- mIpc.setL2KeyAndGroupHint(TEST_L2KEY, TEST_GROUPHINT);
- }
- mIpc.startProvisioning(builder.build());
+ mIpc.startProvisioning(prov.build());
if (!isPreconnectionEnabled) {
verify(mCb, timeout(TEST_TIMEOUT_MS)).setFallbackMulticastFilter(false);
}
diff --git a/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java b/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java
index 8a8ff8f..8fc44a4 100644
--- a/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java
+++ b/tests/unit/src/android/net/shared/ProvisioningConfigurationTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import android.net.LinkAddress;
+import android.net.MacAddress;
import android.net.Network;
import android.net.StaticIpConfiguration;
import android.net.apf.ApfCapabilities;
@@ -83,8 +84,10 @@ public class ProvisioningConfigurationTest {
mConfig.mDisplayName = "test_config";
mConfig.mEnablePreconnection = false;
mConfig.mScanResultInfo = makeScanResultInfo("ssid");
+ mConfig.mLayer2Info = new Layer2Information("some l2key", "some groupHint",
+ MacAddress.fromString("00:01:02:03:04:05"));
// Any added field must be included in equals() to be tested properly
- assertFieldCountEquals(14, ProvisioningConfiguration.class);
+ assertFieldCountEquals(15, ProvisioningConfiguration.class);
}
@Test
@@ -160,7 +163,14 @@ public class ProvisioningConfigurationTest {
assertNotEqualsAfterChange(c -> c.mEnablePreconnection = true);
assertNotEqualsAfterChange(c -> c.mScanResultInfo = null);
assertNotEqualsAfterChange(c -> c.mScanResultInfo = makeScanResultInfo("another ssid"));
- assertFieldCountEquals(14, ProvisioningConfiguration.class);
+ assertNotEqualsAfterChange(c -> c.mLayer2Info = new Layer2Information("another l2key",
+ "some groupHint", MacAddress.fromString("00:01:02:03:04:05")));
+ assertNotEqualsAfterChange(c -> c.mLayer2Info = new Layer2Information("some l2key",
+ "another groupHint", MacAddress.fromString("00:01:02:03:04:05")));
+ assertNotEqualsAfterChange(c -> c.mLayer2Info = new Layer2Information("some l2key",
+ "some groupHint", MacAddress.fromString("01:02:03:04:05:06")));
+ assertNotEqualsAfterChange(c -> c.mLayer2Info = null);
+ assertFieldCountEquals(15, ProvisioningConfiguration.class);
}
private void assertNotEqualsAfterChange(Consumer<ProvisioningConfiguration> mutator) {