diff options
8 files changed, 148 insertions, 0 deletions
diff --git a/common/moduleutils/Android.bp b/common/moduleutils/Android.bp index 81475d2..f32f8d8 100644 --- a/common/moduleutils/Android.bp +++ b/common/moduleutils/Android.bp @@ -23,6 +23,7 @@ filegroup { "src/android/net/util/SharedLog.java", "src/android/net/shared/InitialConfiguration.java", "src/android/net/shared/IpConfigurationParcelableUtil.java", + "src/android/net/shared/Layer2Information.java", "src/android/net/shared/LinkPropertiesParcelableUtil.java", "src/android/net/shared/ParcelableUtil.java", "src/android/net/shared/NetdUtils.java", diff --git a/common/moduleutils/src/android/net/shared/Layer2Information.java b/common/moduleutils/src/android/net/shared/Layer2Information.java new file mode 100644 index 0000000..77956a7 --- /dev/null +++ b/common/moduleutils/src/android/net/shared/Layer2Information.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.shared; + +import android.net.Layer2InformationParcelable; +import android.net.MacAddress; + +import java.util.Objects; + +/** @hide */ +public class Layer2Information { + private final String mL2Key; + private final String mGroupHint; + private final MacAddress mBssid; + + /** + * Create a Layer2Information with the specified configuration. + */ + public Layer2Information(String l2Key, String groupHint, MacAddress bssid) { + mL2Key = l2Key; + mGroupHint = groupHint; + mBssid = bssid; + } + + @Override + public String toString() { + StringBuffer str = new StringBuffer(); + str.append("L2Key: ").append(mL2Key); + str.append(", GroupHint: ").append(mGroupHint); + str.append(", bssid: ").append(mBssid.toString()); + return str.toString(); + } + + /** + * Convert Layer2 Information to a {@link Layer2InformationParcelable}. + */ + public Layer2InformationParcelable toStableParcelable() { + final Layer2InformationParcelable p = new Layer2InformationParcelable(); + p.l2Key = mL2Key; + p.groupHint = mGroupHint; + p.bssid = mBssid; + return p; + } + + /** + * Create an instance of {@link Layer2Information} based on the contents of the specified + * {@link Layer2InformationParcelable}. + */ + public Layer2Information fromStableParcelable(Layer2InformationParcelable p) { + if (p == null) return null; + return new Layer2Information(p.l2Key, p.groupHint, p.bssid); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Layer2Information)) return false; + final Layer2Information other = (Layer2Information) obj; + return Objects.equals(mL2Key, other.mL2Key) + && Objects.equals(mGroupHint, other.mGroupHint) + && Objects.equals(mBssid, other.mBssid); + } + + @Override + public int hashCode() { + return Objects.hash(mL2Key, mGroupHint, mBssid); + } +} diff --git a/common/networkstackclient/Android.bp b/common/networkstackclient/Android.bp index 0965eb9..9081af4 100644 --- a/common/networkstackclient/Android.bp +++ b/common/networkstackclient/Android.bp @@ -62,6 +62,7 @@ aidl_interface { "src/android/net/INetworkStackStatusCallback.aidl", "src/android/net/InitialConfigurationParcelable.aidl", "src/android/net/InformationElementParcelable.aidl", + "src/android/net/Layer2InformationParcelable.aidl", "src/android/net/Layer2PacketParcelable.aidl", "src/android/net/NattKeepalivePacketDataParcelable.aidl", "src/android/net/PrivateDnsConfigParcel.aidl", diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/Layer2InformationParcelable.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/Layer2InformationParcelable.aidl new file mode 100644 index 0000000..c733188 --- /dev/null +++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/Layer2InformationParcelable.aidl @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL interface (or parcelable). Do not try to +// edit this file. It looks like you are doing that because you have modified +// an AIDL interface in a backward-incompatible way, e.g., deleting a function +// from an interface or a field from a parcelable and it broke the build. That +// breakage is intended. +// +// You must not make a backward incompatible changes to the AIDL files built +// with the aidl_interface module type with versions property set. The module +// type is used to build AIDL files in a way that they can be used across +// independently updatable components of the system. If a device is shipped +// with such a backward incompatible change, it has a high risk of breaking +// later when a module using the interface is updated, e.g., Mainline modules. + +package android.net; +parcelable Layer2InformationParcelable { + String l2Key; + String groupHint; + android.net.MacAddress bssid; +} diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ip/IIpClient.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ip/IIpClient.aidl index 250f855..6c2d86b 100644 --- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ip/IIpClient.aidl +++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/ip/IIpClient.aidl @@ -32,4 +32,5 @@ interface IIpClient { oneway void setL2KeyAndGroupHint(in String l2Key, in String groupHint); oneway void addNattKeepalivePacketFilter(int slot, in android.net.NattKeepalivePacketDataParcelable pkt); oneway void notifyPreconnectionComplete(boolean success); + oneway void updateLayer2Information(in android.net.Layer2InformationParcelable info); } diff --git a/common/networkstackclient/src/android/net/Layer2InformationParcelable.aidl b/common/networkstackclient/src/android/net/Layer2InformationParcelable.aidl new file mode 100644 index 0000000..496d291 --- /dev/null +++ b/common/networkstackclient/src/android/net/Layer2InformationParcelable.aidl @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net; + +import android.net.MacAddress; + +parcelable Layer2InformationParcelable { + String l2Key; + String groupHint; + MacAddress bssid; +} diff --git a/common/networkstackclient/src/android/net/ip/IIpClient.aidl b/common/networkstackclient/src/android/net/ip/IIpClient.aidl index ad94aee..0027949 100644 --- a/common/networkstackclient/src/android/net/ip/IIpClient.aidl +++ b/common/networkstackclient/src/android/net/ip/IIpClient.aidl @@ -15,6 +15,7 @@ */ package android.net.ip; +import android.net.Layer2InformationParcelable; import android.net.ProxyInfo; import android.net.ProvisioningConfigurationParcelable; import android.net.NattKeepalivePacketDataParcelable; @@ -36,4 +37,5 @@ oneway interface IIpClient { void setL2KeyAndGroupHint(in String l2Key, in String groupHint); void addNattKeepalivePacketFilter(int slot, in NattKeepalivePacketDataParcelable pkt); void notifyPreconnectionComplete(boolean success); + void updateLayer2Information(in Layer2InformationParcelable info); } diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java index ebb31c6..bb5565d 100644 --- a/src/android/net/ip/IpClient.java +++ b/src/android/net/ip/IpClient.java @@ -28,6 +28,7 @@ import android.net.ConnectivityManager; import android.net.DhcpResults; import android.net.INetd; import android.net.IpPrefix; +import android.net.Layer2InformationParcelable; import android.net.Layer2PacketParcelable; import android.net.LinkAddress; import android.net.LinkProperties; @@ -705,6 +706,12 @@ public class IpClient extends StateMachine { } @Override + public void updateLayer2Information(Layer2InformationParcelable info) { + enforceNetworkStackCallingPermission(); + IpClient.this.updateLayer2Information(info); + } + + @Override public int getInterfaceVersion() { return this.VERSION; } @@ -878,6 +885,13 @@ public class IpClient extends StateMachine { } /** + * Update the network bssid, L2Key and GroupHint layer2 information. + */ + public void updateLayer2Information(@NonNull Layer2InformationParcelable info) { + // TODO: add specific implementation. + } + + /** * Dump logs of this IpClient. */ public void dump(FileDescriptor fd, PrintWriter writer, String[] args) { |