Merge changes from topic "services.net-wifi" into rvc-dev

* changes:
  services.net: Add a static library needed by wifi module
  services.net: Use the new ModuleNetworkStackClient
This commit is contained in:
Roshan Pius
2020-03-13 22:39:09 +00:00
committed by Android (Google) Code Review
8 changed files with 131 additions and 43 deletions

View File

@@ -693,6 +693,7 @@ filegroup {
"core/java/android/annotation/CallbackExecutor.java", "core/java/android/annotation/CallbackExecutor.java",
"core/java/android/annotation/CheckResult.java", "core/java/android/annotation/CheckResult.java",
"core/java/android/annotation/CurrentTimeMillisLong.java", "core/java/android/annotation/CurrentTimeMillisLong.java",
"core/java/android/annotation/Hide.java",
"core/java/android/annotation/IntDef.java", "core/java/android/annotation/IntDef.java",
"core/java/android/annotation/IntRange.java", "core/java/android/annotation/IntRange.java",
"core/java/android/annotation/LongDef.java", "core/java/android/annotation/LongDef.java",
@@ -752,6 +753,18 @@ filegroup {
], ],
} }
filegroup {
name: "framework-services-net-module-wifi-shared-srcs",
srcs: [
"core/java/android/net/DhcpResults.java",
"core/java/android/net/shared/Inet4AddressUtils.java",
"core/java/android/net/shared/InetAddressUtils.java",
"core/java/android/net/util/IpUtils.java",
"core/java/android/util/LocalLog.java",
"core/java/com/android/internal/util/Preconditions.java",
],
}
// keep these files in sync with the package/Tethering/jarjar-rules.txt for the tethering module. // keep these files in sync with the package/Tethering/jarjar-rules.txt for the tethering module.
filegroup { filegroup {
name: "framework-tethering-shared-srcs", name: "framework-tethering-shared-srcs",
@@ -1240,7 +1253,6 @@ filegroup {
"core/java/android/net/InterfaceConfiguration.java", "core/java/android/net/InterfaceConfiguration.java",
"core/java/android/os/BasicShellCommandHandler.java", "core/java/android/os/BasicShellCommandHandler.java",
"core/java/android/util/BackupUtils.java", "core/java/android/util/BackupUtils.java",
"core/java/android/util/LocalLog.java",
"core/java/android/util/Rational.java", "core/java/android/util/Rational.java",
"core/java/com/android/internal/util/FastXmlSerializer.java", "core/java/com/android/internal/util/FastXmlSerializer.java",
"core/java/com/android/internal/util/HexDump.java", "core/java/com/android/internal/util/HexDump.java",

View File

@@ -22,7 +22,6 @@ import static android.net.InvalidPacketException.ERROR_INVALID_PORT;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.net.util.IpUtils; import android.net.util.IpUtils;
import android.os.Parcel;
import android.util.Log; import android.util.Log;
import java.net.InetAddress; import java.net.InetAddress;
@@ -30,7 +29,6 @@ import java.net.InetAddress;
/** /**
* Represents the actual packets that are sent by the * Represents the actual packets that are sent by the
* {@link android.net.SocketKeepalive} API. * {@link android.net.SocketKeepalive} API.
*
* @hide * @hide
*/ */
@SystemApi @SystemApi
@@ -54,6 +52,9 @@ public class KeepalivePacketData {
/** Packet data. A raw byte string of packet data, not including the link-layer header. */ /** Packet data. A raw byte string of packet data, not including the link-layer header. */
private final byte[] mPacket; private final byte[] mPacket;
// Note: If you add new fields, please modify the parcelling code in the child classes.
// This should only be constructed via static factory methods, such as // This should only be constructed via static factory methods, such as
// nattKeepalivePacket. // nattKeepalivePacket.
/** /**
@@ -87,21 +88,4 @@ public class KeepalivePacketData {
return mPacket.clone(); return mPacket.clone();
} }
/** @hide */
public void writeToParcel(Parcel out, int flags) {
out.writeString(srcAddress.getHostAddress());
out.writeString(dstAddress.getHostAddress());
out.writeInt(srcPort);
out.writeInt(dstPort);
out.writeByteArray(mPacket);
}
/** @hide */
protected KeepalivePacketData(Parcel in) {
srcAddress = NetworkUtils.numericToInetAddress(in.readString());
dstAddress = NetworkUtils.numericToInetAddress(in.readString());
srcPort = in.readInt();
dstPort = in.readInt();
mPacket = in.createByteArray();
}
} }

View File

@@ -20,6 +20,44 @@ java_library_static {
], ],
} }
// Version of services.net for usage by the wifi mainline module.
// Note: This is compiled against module_current.
// TODO(b/145825329): This should be moved to networkstack-client,
// with dependencies moved to frameworks/libs/net right.
java_library {
name: "services.net-module-wifi",
srcs: [
":framework-services-net-module-wifi-shared-srcs",
":net-module-utils-srcs",
"java/android/net/ip/IpClientCallbacks.java",
"java/android/net/ip/IpClientManager.java",
"java/android/net/ip/IpClientUtil.java",
"java/android/net/util/KeepalivePacketDataUtil.java",
"java/android/net/util/NetworkConstants.java",
"java/android/net/IpMemoryStore.java",
"java/android/net/NetworkMonitorManager.java",
"java/android/net/TcpKeepalivePacketData.java",
],
sdk_version: "module_current",
libs: [
"unsupportedappusage",
],
static_libs: [
"dnsresolver_aidl_interface-V2-java",
"netd_aidl_interface-unstable-java",
"netlink-client",
"networkstack-client",
"net-utils-services-common",
],
apex_available: [
"com.android.wifi",
],
visibility: [
"//frameworks/opt/net/wifi/service",
"//frameworks/opt/net/wifi/tests/wifitests",
],
}
filegroup { filegroup {
name: "services-tethering-shared-srcs", name: "services-tethering-shared-srcs",
srcs: [ srcs: [

View File

@@ -18,6 +18,7 @@ package android.net;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.content.Context; import android.content.Context;
import android.net.networkstack.ModuleNetworkStackClient;
import android.util.Log; import android.util.Log;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
@@ -41,7 +42,7 @@ public class IpMemoryStore extends IpMemoryStoreClient {
super(context); super(context);
mService = new CompletableFuture<>(); mService = new CompletableFuture<>();
mTailNode = new AtomicReference<CompletableFuture<IIpMemoryStore>>(mService); mTailNode = new AtomicReference<CompletableFuture<IIpMemoryStore>>(mService);
getNetworkStackClient().fetchIpMemoryStore( getModuleNetworkStackClient(context).fetchIpMemoryStore(
new IIpMemoryStoreCallbacks.Stub() { new IIpMemoryStoreCallbacks.Stub() {
@Override @Override
public void onIpMemoryStoreFetched(@NonNull final IIpMemoryStore memoryStore) { public void onIpMemoryStoreFetched(@NonNull final IIpMemoryStore memoryStore) {
@@ -85,8 +86,8 @@ public class IpMemoryStore extends IpMemoryStoreClient {
} }
@VisibleForTesting @VisibleForTesting
protected NetworkStackClient getNetworkStackClient() { protected ModuleNetworkStackClient getModuleNetworkStackClient(Context context) {
return NetworkStackClient.getInstance(); return ModuleNetworkStackClient.getInstance(context);
} }
/** Gets an instance of the memory store */ /** Gets an instance of the memory store */

View File

@@ -74,6 +74,19 @@ public class TcpKeepalivePacketData extends KeepalivePacketData implements Parce
ipTtl = tcpDetails.ttl; ipTtl = tcpDetails.ttl;
} }
private TcpKeepalivePacketData(final InetAddress srcAddress, int srcPort,
final InetAddress dstAddress, int dstPort, final byte[] data, int tcpSeq,
int tcpAck, int tcpWnd, int tcpWndScale, int ipTos, int ipTtl)
throws InvalidPacketException {
super(srcAddress, srcPort, dstAddress, dstPort, data);
this.tcpSeq = tcpSeq;
this.tcpAck = tcpAck;
this.tcpWnd = tcpWnd;
this.tcpWndScale = tcpWndScale;
this.ipTos = ipTos;
this.ipTtl = ipTtl;
}
/** /**
* Factory method to create tcp keepalive packet structure. * Factory method to create tcp keepalive packet structure.
*/ */
@@ -169,7 +182,11 @@ public class TcpKeepalivePacketData extends KeepalivePacketData implements Parce
/** Write to parcel. */ /** Write to parcel. */
public void writeToParcel(Parcel out, int flags) { public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags); out.writeString(srcAddress.getHostAddress());
out.writeString(dstAddress.getHostAddress());
out.writeInt(srcPort);
out.writeInt(dstPort);
out.writeByteArray(getPacket());
out.writeInt(tcpSeq); out.writeInt(tcpSeq);
out.writeInt(tcpAck); out.writeInt(tcpAck);
out.writeInt(tcpWnd); out.writeInt(tcpWnd);
@@ -178,21 +195,32 @@ public class TcpKeepalivePacketData extends KeepalivePacketData implements Parce
out.writeInt(ipTtl); out.writeInt(ipTtl);
} }
private TcpKeepalivePacketData(Parcel in) { private static TcpKeepalivePacketData readFromParcel(Parcel in) throws InvalidPacketException {
super(in); InetAddress srcAddress = InetAddresses.parseNumericAddress(in.readString());
tcpSeq = in.readInt(); InetAddress dstAddress = InetAddresses.parseNumericAddress(in.readString());
tcpAck = in.readInt(); int srcPort = in.readInt();
tcpWnd = in.readInt(); int dstPort = in.readInt();
tcpWndScale = in.readInt(); byte[] packet = in.createByteArray();
ipTos = in.readInt(); int tcpSeq = in.readInt();
ipTtl = in.readInt(); int tcpAck = in.readInt();
int tcpWnd = in.readInt();
int tcpWndScale = in.readInt();
int ipTos = in.readInt();
int ipTtl = in.readInt();
return new TcpKeepalivePacketData(srcAddress, srcPort, dstAddress, dstPort, packet, tcpSeq,
tcpAck, tcpWnd, tcpWndScale, ipTos, ipTtl);
} }
/** Parcelable Creator. */ /** Parcelable Creator. */
public static final @NonNull Parcelable.Creator<TcpKeepalivePacketData> CREATOR = public static final @NonNull Parcelable.Creator<TcpKeepalivePacketData> CREATOR =
new Parcelable.Creator<TcpKeepalivePacketData>() { new Parcelable.Creator<TcpKeepalivePacketData>() {
public TcpKeepalivePacketData createFromParcel(Parcel in) { public TcpKeepalivePacketData createFromParcel(Parcel in) {
return new TcpKeepalivePacketData(in); try {
return readFromParcel(in);
} catch (InvalidPacketException e) {
throw new IllegalArgumentException(
"Invalid NAT-T keepalive data: " + e.error);
}
} }
public TcpKeepalivePacketData[] newArray(int size) { public TcpKeepalivePacketData[] newArray(int size) {

View File

@@ -22,7 +22,7 @@ import android.content.Context;
import android.net.DhcpResultsParcelable; import android.net.DhcpResultsParcelable;
import android.net.Layer2PacketParcelable; import android.net.Layer2PacketParcelable;
import android.net.LinkProperties; import android.net.LinkProperties;
import android.net.NetworkStackClient; import android.net.networkstack.ModuleNetworkStackClient;
import android.os.ConditionVariable; import android.os.ConditionVariable;
import java.io.FileDescriptor; import java.io.FileDescriptor;
@@ -75,11 +75,11 @@ public class IpClientUtil {
* *
* <p>This is a convenience method to allow clients to use {@link IpClientCallbacks} instead of * <p>This is a convenience method to allow clients to use {@link IpClientCallbacks} instead of
* {@link IIpClientCallbacks}. * {@link IIpClientCallbacks}.
* @see {@link NetworkStackClient#makeIpClient(String, IIpClientCallbacks)} * @see {@link ModuleNetworkStackClient#makeIpClient(String, IIpClientCallbacks)}
*/ */
public static void makeIpClient(Context context, String ifName, IpClientCallbacks callback) { public static void makeIpClient(Context context, String ifName, IpClientCallbacks callback) {
// TODO: migrate clients and remove context argument ModuleNetworkStackClient.getInstance(context)
NetworkStackClient.getInstance().makeIpClient(ifName, new IpClientCallbacksProxy(callback)); .makeIpClient(ifName, new IpClientCallbacksProxy(callback));
} }
/** /**

View File

@@ -35,6 +35,7 @@ import android.net.ipmemorystore.IOnStatusListener;
import android.net.ipmemorystore.NetworkAttributes; import android.net.ipmemorystore.NetworkAttributes;
import android.net.ipmemorystore.NetworkAttributesParcelable; import android.net.ipmemorystore.NetworkAttributesParcelable;
import android.net.ipmemorystore.Status; import android.net.ipmemorystore.Status;
import android.net.networkstack.ModuleNetworkStackClient;
import android.os.RemoteException; import android.os.RemoteException;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -67,7 +68,7 @@ public class IpMemoryStoreTest {
@Mock @Mock
Context mMockContext; Context mMockContext;
@Mock @Mock
NetworkStackClient mNetworkStackClient; ModuleNetworkStackClient mModuleNetworkStackClient;
@Mock @Mock
IIpMemoryStore mMockService; IIpMemoryStore mMockService;
@Mock @Mock
@@ -90,14 +91,14 @@ public class IpMemoryStoreTest {
((IIpMemoryStoreCallbacks) invocation.getArgument(0)) ((IIpMemoryStoreCallbacks) invocation.getArgument(0))
.onIpMemoryStoreFetched(mMockService); .onIpMemoryStoreFetched(mMockService);
return null; return null;
}).when(mNetworkStackClient).fetchIpMemoryStore(any()); }).when(mModuleNetworkStackClient).fetchIpMemoryStore(any());
} else { } else {
doNothing().when(mNetworkStackClient).fetchIpMemoryStore(mCbCaptor.capture()); doNothing().when(mModuleNetworkStackClient).fetchIpMemoryStore(mCbCaptor.capture());
} }
mStore = new IpMemoryStore(mMockContext) { mStore = new IpMemoryStore(mMockContext) {
@Override @Override
protected NetworkStackClient getNetworkStackClient() { protected ModuleNetworkStackClient getModuleNetworkStackClient(Context ctx) {
return mNetworkStackClient; return mModuleNetworkStackClient;
} }
}; };
} }

View File

@@ -1,7 +1,32 @@
# used by wifi-service
rule android.net.DhcpResultsParcelable* @0
rule android.net.DhcpResults* com.android.server.x.wifi.net.DhcpResults@1
rule android.net.InterfaceConfigurationParcel* @0 rule android.net.InterfaceConfigurationParcel* @0
rule android.net.InterfaceConfiguration* com.android.server.x.wifi.net.InterfaceConfiguration@1 rule android.net.InterfaceConfiguration* com.android.server.x.wifi.net.InterfaceConfiguration@1
rule android.net.IpMemoryStore* com.android.server.x.wifi.net.IpMemoryStore@1
rule android.net.NetworkMonitorManager* com.android.server.x.wifi.net.NetworkMonitorManager@1
rule android.net.TcpKeepalivePacketData* com.android.server.x.wifi.net.TcpKeepalivePacketData@1
rule android.net.NetworkFactory* com.android.server.x.wifi.net.NetworkFactory@1 rule android.net.NetworkFactory* com.android.server.x.wifi.net.NetworkFactory@1
rule android.net.ip.IpClientCallbacks* com.android.server.x.wifi.net.ip.IpClientCallbacks@1
rule android.net.ip.IpClientManager* com.android.server.x.wifi.net.ip.IpClientManager@1
rule android.net.ip.IpClientUtil* com.android.server.x.wifi.net.ip.IpClientUtil@1
rule android.net.shared.InetAddressUtils* com.android.server.x.wifi.net.shared.InetAddressUtils@1
rule android.net.shared.InitialConfiguration* com.android.server.x.wifi.net.shared.InitialConfiguration@1
rule android.net.shared.IpConfigurationParcelableUtil* com.android.server.x.wifi.net.shared.IpConfigurationParcelableUtil@1
rule android.net.shared.LinkPropertiesParcelableUtil* com.android.server.x.wifi.net.shared.LinkPropertiesParcelableUtil@1
rule android.net.shared.ParcelableUtil* com.android.server.x.wifi.net.shared.ParcelableUtil@1
rule android.net.shared.NetdUtils* com.android.server.x.wifi.net.shared.NetdUtils@1
rule android.net.shared.NetworkMonitorUtils* com.android.server.x.wifi.net.shared.NetworkMonitorUtils@1
rule android.net.shared.ParcelableUtil* com.android.server.x.wifi.net.shared.ParcelableUtil@1
rule android.net.shared.PrivateDnsConfig* com.android.server.x.wifi.net.shared.PrivateDnsConfig@1
rule android.net.shared.ProvisioningConfiguration* com.android.server.x.wifi.net.shared.ProvisioningConfiguration@1
rule android.net.shared.RouteUtils* com.android.server.x.wifi.net.shared.RouteUtils@1
rule android.net.util.KeepalivePacketDataUtil* com.android.server.x.wifi.net.util.KeepalivePacketDataUtil@1
rule android.net.util.NetworkConstants* com.android.server.x.wifi.net.util.NetworkConstants@1
rule android.net.util.InterfaceParams* com.android.server.x.wifi.net.util.InterfaceParams@1
rule android.net.util.SharedLog* com.android.server.x.wifi.net.util.SharedLog@1
rule android.net.util.NetUtils* com.android.server.x.wifi.net.util.NetUtils@1 rule android.net.util.NetUtils* com.android.server.x.wifi.net.util.NetUtils@1
rule android.net.util.IpUtils* com.android.server.x.wifi.net.util.IpUtils@1
# We don't jar-jar the entire package because, we still use some classes (like # We don't jar-jar the entire package because, we still use some classes (like
# AsyncChannel in com.android.internal.util) from these packages which are not # AsyncChannel in com.android.internal.util) from these packages which are not
@@ -29,7 +54,6 @@ rule com.android.internal.messages.SystemMessageProto* com.android.server.x.wifi
# Use our statically linked PlatformProperties library # Use our statically linked PlatformProperties library
rule android.sysprop.** com.android.server.x.wifi.sysprop.@1 rule android.sysprop.** com.android.server.x.wifi.sysprop.@1
# used by both framework-wifi and wifi-service # used by both framework-wifi and wifi-service
rule android.content.pm.BaseParceledListSlice* android.x.net.wifi.util.BaseParceledListSlice@1 rule android.content.pm.BaseParceledListSlice* android.x.net.wifi.util.BaseParceledListSlice@1
rule android.content.pm.ParceledListSlice* android.x.net.wifi.util.ParceledListSlice@1 rule android.content.pm.ParceledListSlice* android.x.net.wifi.util.ParceledListSlice@1