From f4d72b212cfbedaa73a659b29f4b0bcd9988a131 Mon Sep 17 00:00:00 2001 From: Xiao Ma Date: Tue, 28 Dec 2021 09:16:09 +0000 Subject: [PATCH] Split out the ethernet API surface and use framework-connectivity-t Ethernet framework and service source code is going to be moved to Connectivity mainline module, this CL contains below corresponding changes to adapt the migration in f/b side: 1. Split out ethernet module-lib APIs to Connectivity module. Add the ethernet resource filegroup to tiramisu-updatable-sources filegroup as well, build them together. Also update the module-lib and system api txt to reflect the APIs change. Remove the hidden APIs which are moved to Connectivity module. This removal fixes the api inconsistent issue with Tethering/apex/hidden/. 2. Remove EthernetService from SystemServer which will be registered from ConnectivityServiceInitializer. 3. Replace the BackgroundThread class(imported from f/b/core/java) with the one in the modules-utils-backgroundthread lib, which is visible to Connectivity module. Bug: 210586283 Test: m Test: atest FrameworksNetTests EthernetServiceTests Change-Id: I3e13cb9c0e348333af295c2537d459aa6700ff17 Merged-In: I1956848d3248cc56e9841d221e5e4c160bed65a4 --- boot/hiddenapi/hiddenapi-max-target-o.txt | 41 ------------------- core/api/current.txt | 8 ---- core/api/module-lib-current.txt | 16 -------- core/api/system-current.txt | 39 ------------------ .../android/app/SystemServiceRegistry.java | 11 ----- packages/ConnectivityT/framework-t/Android.bp | 6 +-- ...nectivityFrameworkInitializerTiramisu.java | 14 ++++++- .../src/android/net/EthernetManager.java | 2 +- packages/ConnectivityT/service/Android.bp | 8 ++-- .../android/server/net/IpConfigStoreTest.java | 19 ++++----- .../java/com/android/server/SystemServer.java | 9 ---- 11 files changed, 29 insertions(+), 144 deletions(-) rename {services/tests/servicestests/src => packages/ConnectivityT/tests/unit/java}/com/android/server/net/IpConfigStoreTest.java (92%) diff --git a/boot/hiddenapi/hiddenapi-max-target-o.txt b/boot/hiddenapi/hiddenapi-max-target-o.txt index e346ebf827ae1..eddb1621a4fa1 100644 --- a/boot/hiddenapi/hiddenapi-max-target-o.txt +++ b/boot/hiddenapi/hiddenapi-max-target-o.txt @@ -35278,14 +35278,6 @@ Landroid/net/DhcpResults;->setLeaseDuration(I)V Landroid/net/DhcpResults;->setServerAddress(Ljava/lang/String;)Z Landroid/net/DhcpResults;->setVendorInfo(Ljava/lang/String;)V Landroid/net/DhcpResults;->TAG:Ljava/lang/String; -Landroid/net/EthernetManager;->(Landroid/content/Context;Landroid/net/IEthernetManager;)V -Landroid/net/EthernetManager;->mContext:Landroid/content/Context; -Landroid/net/EthernetManager;->mHandler:Landroid/os/Handler; -Landroid/net/EthernetManager;->mListeners:Ljava/util/ArrayList; -Landroid/net/EthernetManager;->mService:Landroid/net/IEthernetManager; -Landroid/net/EthernetManager;->mServiceListener:Landroid/net/IEthernetServiceListener$Stub; -Landroid/net/EthernetManager;->MSG_AVAILABILITY_CHANGED:I -Landroid/net/EthernetManager;->TAG:Ljava/lang/String; Landroid/net/EventLogTags;->()V Landroid/net/EventLogTags;->NTP_FAILURE:I Landroid/net/EventLogTags;->NTP_SUCCESS:I @@ -35319,39 +35311,6 @@ Landroid/net/http/X509TrustManagerExtensions;->mCheckServerTrusted:Ljava/lang/re Landroid/net/http/X509TrustManagerExtensions;->mDelegate:Lcom/android/org/conscrypt/TrustManagerImpl; Landroid/net/http/X509TrustManagerExtensions;->mIsSameTrustConfiguration:Ljava/lang/reflect/Method; Landroid/net/http/X509TrustManagerExtensions;->mTrustManager:Ljavax/net/ssl/X509TrustManager; -Landroid/net/IEthernetManager$Stub$Proxy;->(Landroid/os/IBinder;)V -Landroid/net/IEthernetManager$Stub$Proxy;->addListener(Landroid/net/IEthernetServiceListener;)V -Landroid/net/IEthernetManager$Stub$Proxy;->getAvailableInterfaces()[Ljava/lang/String; -Landroid/net/IEthernetManager$Stub$Proxy;->getConfiguration(Ljava/lang/String;)Landroid/net/IpConfiguration; -Landroid/net/IEthernetManager$Stub$Proxy;->getInterfaceDescriptor()Ljava/lang/String; -Landroid/net/IEthernetManager$Stub$Proxy;->isAvailable(Ljava/lang/String;)Z -Landroid/net/IEthernetManager$Stub$Proxy;->mRemote:Landroid/os/IBinder; -Landroid/net/IEthernetManager$Stub$Proxy;->removeListener(Landroid/net/IEthernetServiceListener;)V -Landroid/net/IEthernetManager$Stub$Proxy;->setConfiguration(Ljava/lang/String;Landroid/net/IpConfiguration;)V -Landroid/net/IEthernetManager$Stub;->()V -Landroid/net/IEthernetManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IEthernetManager; -Landroid/net/IEthernetManager$Stub;->DESCRIPTOR:Ljava/lang/String; -Landroid/net/IEthernetManager$Stub;->TRANSACTION_addListener:I -Landroid/net/IEthernetManager$Stub;->TRANSACTION_getAvailableInterfaces:I -Landroid/net/IEthernetManager$Stub;->TRANSACTION_getConfiguration:I -Landroid/net/IEthernetManager$Stub;->TRANSACTION_isAvailable:I -Landroid/net/IEthernetManager$Stub;->TRANSACTION_removeListener:I -Landroid/net/IEthernetManager$Stub;->TRANSACTION_setConfiguration:I -Landroid/net/IEthernetManager;->addListener(Landroid/net/IEthernetServiceListener;)V -Landroid/net/IEthernetManager;->getAvailableInterfaces()[Ljava/lang/String; -Landroid/net/IEthernetManager;->getConfiguration(Ljava/lang/String;)Landroid/net/IpConfiguration; -Landroid/net/IEthernetManager;->isAvailable(Ljava/lang/String;)Z -Landroid/net/IEthernetManager;->removeListener(Landroid/net/IEthernetServiceListener;)V -Landroid/net/IEthernetManager;->setConfiguration(Ljava/lang/String;Landroid/net/IpConfiguration;)V -Landroid/net/IEthernetServiceListener$Stub$Proxy;->(Landroid/os/IBinder;)V -Landroid/net/IEthernetServiceListener$Stub$Proxy;->getInterfaceDescriptor()Ljava/lang/String; -Landroid/net/IEthernetServiceListener$Stub$Proxy;->mRemote:Landroid/os/IBinder; -Landroid/net/IEthernetServiceListener$Stub$Proxy;->onAvailabilityChanged(Ljava/lang/String;Z)V -Landroid/net/IEthernetServiceListener$Stub;->()V -Landroid/net/IEthernetServiceListener$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IEthernetServiceListener; -Landroid/net/IEthernetServiceListener$Stub;->DESCRIPTOR:Ljava/lang/String; -Landroid/net/IEthernetServiceListener$Stub;->TRANSACTION_onAvailabilityChanged:I -Landroid/net/IEthernetServiceListener;->onAvailabilityChanged(Ljava/lang/String;Z)V Landroid/net/IIpConnectivityMetrics$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/IIpConnectivityMetrics$Stub$Proxy;->addNetdEventCallback(ILandroid/net/INetdEventCallback;)Z Landroid/net/IIpConnectivityMetrics$Stub$Proxy;->getInterfaceDescriptor()Ljava/lang/String; diff --git a/core/api/current.txt b/core/api/current.txt index 88f4eecbaaa46..e6c3e4b9f3603 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -25203,14 +25203,6 @@ package android.net { method public int getUid(); } - public final class EthernetNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable { - ctor public EthernetNetworkSpecifier(@NonNull String); - method public int describeContents(); - method @Nullable public String getInterfaceName(); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator CREATOR; - } - public final class Ikev2VpnProfile extends android.net.PlatformVpnProfile { method @NonNull public java.util.List getAllowedAlgorithms(); method public int getMaxMtu(); diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt index a6278f87f485f..1d955249f7e57 100644 --- a/core/api/module-lib-current.txt +++ b/core/api/module-lib-current.txt @@ -193,22 +193,6 @@ package android.media.session { package android.net { - public class EthernetManager { - method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void addInterfaceStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.EthernetManager.InterfaceStateListener); - method public void removeInterfaceStateListener(@NonNull android.net.EthernetManager.InterfaceStateListener); - method public void setIncludeTestInterfaces(boolean); - field public static final int ROLE_CLIENT = 1; // 0x1 - field public static final int ROLE_NONE = 0; // 0x0 - field public static final int ROLE_SERVER = 2; // 0x2 - field public static final int STATE_ABSENT = 0; // 0x0 - field public static final int STATE_LINK_DOWN = 1; // 0x1 - field public static final int STATE_LINK_UP = 2; // 0x2 - } - - public static interface EthernetManager.InterfaceStateListener { - method public void onInterfaceStateChanged(@NonNull String, int, int, @Nullable android.net.IpConfiguration); - } - public class LocalSocket implements java.io.Closeable { ctor public LocalSocket(@NonNull java.io.FileDescriptor); } diff --git a/core/api/system-current.txt b/core/api/system-current.txt index bb9af143b4b4a..6145886a47e43 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -7063,45 +7063,6 @@ package android.metrics { package android.net { - public class EthernetManager { - method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.MANAGE_ETHERNET_NETWORKS}) public void connectNetwork(@NonNull String, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.BiConsumer); - method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.MANAGE_ETHERNET_NETWORKS}) public void disconnectNetwork(@NonNull String, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.BiConsumer); - method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public android.net.EthernetManager.TetheredInterfaceRequest requestTetheredInterface(@NonNull java.util.concurrent.Executor, @NonNull android.net.EthernetManager.TetheredInterfaceCallback); - method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.MANAGE_ETHERNET_NETWORKS}) public void updateConfiguration(@NonNull String, @NonNull android.net.EthernetNetworkUpdateRequest, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.BiConsumer); - } - - public static interface EthernetManager.TetheredInterfaceCallback { - method public void onAvailable(@NonNull String); - method public void onUnavailable(); - } - - public static class EthernetManager.TetheredInterfaceRequest { - method public void release(); - } - - public final class EthernetNetworkManagementException extends java.lang.RuntimeException implements android.os.Parcelable { - ctor public EthernetNetworkManagementException(@NonNull String); - method public int describeContents(); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator CREATOR; - } - - public final class EthernetNetworkUpdateRequest implements android.os.Parcelable { - method public int describeContents(); - method @NonNull public android.net.IpConfiguration getIpConfiguration(); - method @Nullable public android.net.NetworkCapabilities getNetworkCapabilities(); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator CREATOR; - } - - public static final class EthernetNetworkUpdateRequest.Builder { - ctor public EthernetNetworkUpdateRequest.Builder(); - ctor public EthernetNetworkUpdateRequest.Builder(@NonNull android.net.EthernetNetworkUpdateRequest); - method @NonNull public android.net.EthernetNetworkUpdateRequest build(); - method @NonNull public android.net.EthernetNetworkUpdateRequest.Builder setIpConfiguration(@NonNull android.net.IpConfiguration); - method @NonNull public android.net.EthernetNetworkUpdateRequest.Builder setNetworkCapabilities(@Nullable android.net.NetworkCapabilities); - } - public final class MatchAllNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable { ctor public MatchAllNetworkSpecifier(); method public int describeContents(); diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 6a0a2892cb96a..aee66a29f278f 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -125,8 +125,6 @@ import android.media.tv.tunerresourcemanager.ITunerResourceManager; import android.media.tv.tunerresourcemanager.TunerResourceManager; import android.net.ConnectivityFrameworkInitializer; import android.net.ConnectivityFrameworkInitializerTiramisu; -import android.net.EthernetManager; -import android.net.IEthernetManager; import android.net.INetworkPolicyManager; import android.net.IPacProxyManager; import android.net.IVpnManager; @@ -764,15 +762,6 @@ public final class SystemServiceRegistry { return new LowpanManager(ctx.getOuterContext(), service); }}); - registerService(Context.ETHERNET_SERVICE, EthernetManager.class, - new CachedServiceFetcher() { - @Override - public EthernetManager createService(ContextImpl ctx) throws ServiceNotFoundException { - IBinder b = ServiceManager.getServiceOrThrow(Context.ETHERNET_SERVICE); - IEthernetManager service = IEthernetManager.Stub.asInterface(b); - return new EthernetManager(ctx.getOuterContext(), service); - }}); - registerService(Context.WIFI_NL80211_SERVICE, WifiNl80211Manager.class, new CachedServiceFetcher() { @Override diff --git a/packages/ConnectivityT/framework-t/Android.bp b/packages/ConnectivityT/framework-t/Android.bp index 66527802a0e42..217a1f67c3364 100644 --- a/packages/ConnectivityT/framework-t/Android.bp +++ b/packages/ConnectivityT/framework-t/Android.bp @@ -154,17 +154,17 @@ filegroup { ], } +// TODO: remove this empty filegroup. filegroup { name: "framework-connectivity-tiramisu-sources", - srcs: [ - ":framework-connectivity-ethernet-sources", - ], + srcs: [], visibility: ["//frameworks/base"], } filegroup { name: "framework-connectivity-tiramisu-updatable-sources", srcs: [ + ":framework-connectivity-ethernet-sources", ":framework-connectivity-ipsec-sources", ":framework-connectivity-netstats-sources", ":framework-connectivity-nsd-sources", diff --git a/packages/ConnectivityT/framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java b/packages/ConnectivityT/framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java index 9bffbfb27a8d3..61b34d0bcfe66 100644 --- a/packages/ConnectivityT/framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java +++ b/packages/ConnectivityT/framework-t/src/android/net/ConnectivityFrameworkInitializerTiramisu.java @@ -34,8 +34,9 @@ public final class ConnectivityFrameworkInitializerTiramisu { private ConnectivityFrameworkInitializerTiramisu() {} /** - * Called by {@link SystemServiceRegistry}'s static initializer and registers nsd services to - * {@link Context}, so that {@link Context#getSystemService} can return them. + * Called by {@link SystemServiceRegistry}'s static initializer and registers NetworkStats, nsd, + * ipsec and ethernet services to {@link Context}, so that {@link Context#getSystemService} can + * return them. * * @throws IllegalStateException if this is called anywhere besides * {@link SystemServiceRegistry}. @@ -68,5 +69,14 @@ public final class ConnectivityFrameworkInitializerTiramisu { return new NetworkStatsManager(context, service); } ); + + SystemServiceRegistry.registerContextAwareService( + Context.ETHERNET_SERVICE, + EthernetManager.class, + (context, serviceBinder) -> { + IEthernetManager service = IEthernetManager.Stub.asInterface(serviceBinder); + return new EthernetManager(context, service); + } + ); } } diff --git a/packages/ConnectivityT/framework-t/src/android/net/EthernetManager.java b/packages/ConnectivityT/framework-t/src/android/net/EthernetManager.java index eba51c11487ec..793f28d5aa596 100644 --- a/packages/ConnectivityT/framework-t/src/android/net/EthernetManager.java +++ b/packages/ConnectivityT/framework-t/src/android/net/EthernetManager.java @@ -33,7 +33,7 @@ import android.os.Build; import android.os.RemoteException; import com.android.internal.annotations.GuardedBy; -import com.android.internal.os.BackgroundThread; +import com.android.modules.utils.BackgroundThread; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/packages/ConnectivityT/service/Android.bp b/packages/ConnectivityT/service/Android.bp index 5100e7c5b9a42..4b799c599be91 100644 --- a/packages/ConnectivityT/service/Android.bp +++ b/packages/ConnectivityT/service/Android.bp @@ -102,17 +102,16 @@ filegroup { ], path: "src", visibility: [ - "//frameworks/opt/net/ethernet", + "//frameworks/opt/net/ethernet/tests", ], } // Connectivity-T common libraries. +// TODO: remove this empty filegroup. filegroup { name: "services.connectivity-tiramisu-sources", - srcs: [ - ":services.connectivity-ethernet-sources", - ], + srcs: [], path: "src", visibility: ["//frameworks/base/services/core"], } @@ -120,6 +119,7 @@ filegroup { filegroup { name: "services.connectivity-tiramisu-updatable-sources", srcs: [ + ":services.connectivity-ethernet-sources", ":services.connectivity-ipsec-sources", ":services.connectivity-netstats-sources", ":services.connectivity-nsd-sources", diff --git a/services/tests/servicestests/src/com/android/server/net/IpConfigStoreTest.java b/packages/ConnectivityT/tests/unit/java/com/android/server/net/IpConfigStoreTest.java similarity index 92% rename from services/tests/servicestests/src/com/android/server/net/IpConfigStoreTest.java rename to packages/ConnectivityT/tests/unit/java/com/android/server/net/IpConfigStoreTest.java index 2f771260ac1b6..ad0be5862c5d4 100644 --- a/services/tests/servicestests/src/com/android/server/net/IpConfigStoreTest.java +++ b/packages/ConnectivityT/tests/unit/java/com/android/server/net/IpConfigStoreTest.java @@ -48,10 +48,16 @@ import java.util.Arrays; */ @RunWith(AndroidJUnit4.class) public class IpConfigStoreTest { + private static final int KEY_CONFIG = 17; + private static final String IFACE_1 = "eth0"; + private static final String IFACE_2 = "eth1"; + private static final String IP_ADDR_1 = "192.168.1.10/24"; + private static final String IP_ADDR_2 = "192.168.1.20/24"; + private static final String DNS_IP_ADDR_1 = "1.2.3.4"; + private static final String DNS_IP_ADDR_2 = "5.6.7.8"; @Test public void backwardCompatibility2to3() throws IOException { - final int KEY_CONFIG = 17; ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); DataOutputStream outputStream = new DataOutputStream(byteStream); @@ -73,13 +79,6 @@ public class IpConfigStoreTest { @Test public void staticIpMultiNetworks() throws Exception { - final String IFACE_1 = "eth0"; - final String IFACE_2 = "eth1"; - final String IP_ADDR_1 = "192.168.1.10/24"; - final String IP_ADDR_2 = "192.168.1.20/24"; - final String DNS_IP_ADDR_1 = "1.2.3.4"; - final String DNS_IP_ADDR_2 = "5.6.7.8"; - final ArrayList dnsServers = new ArrayList<>(); dnsServers.add(InetAddresses.parseNumericAddress(DNS_IP_ADDR_1)); dnsServers.add(InetAddresses.parseNumericAddress(DNS_IP_ADDR_2)); @@ -144,11 +143,11 @@ public class IpConfigStoreTest { /** Synchronously writes into given byte steam */ private static class MockedDelayedDiskWrite extends DelayedDiskWrite { - final ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + final ByteArrayOutputStream mByteStream = new ByteArrayOutputStream(); @Override public void write(String filePath, Writer w) { - DataOutputStream outputStream = new DataOutputStream(byteStream); + DataOutputStream outputStream = new DataOutputStream(mByteStream); try { w.onWriteCalled(outputStream); diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 5ae8a5abd6eba..67b656bf2bfc6 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -283,8 +283,6 @@ public final class SystemServer implements Dumpable { "com.android.server.wifi.p2p.WifiP2pService"; private static final String LOWPAN_SERVICE_CLASS = "com.android.server.lowpan.LowpanService"; - private static final String ETHERNET_SERVICE_CLASS = - "com.android.server.ethernet.EthernetService"; private static final String JOB_SCHEDULER_SERVICE_CLASS = "com.android.server.job.JobSchedulerService"; private static final String LOCK_SETTINGS_SERVICE_CLASS = @@ -1889,13 +1887,6 @@ public final class SystemServer implements Dumpable { t.traceEnd(); } - if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET) || - mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) { - t.traceBegin("StartEthernet"); - mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS); - t.traceEnd(); - } - t.traceBegin("StartPacProxyService"); try { pacProxyService = new PacProxyService(context);