From 8ae54f7a3eb23605f2d68ddf2fa156d1a4a0dc17 Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Sat, 6 Mar 2021 00:26:43 +0900 Subject: [PATCH] Remove NetdService, NetworkStackClient dependency Netd should be obtained via getSystemService, and ModuleNetworkStackClient must be used instead of NetworkStackClient for modules. Original change (project moved): Ibe703ac56dd70673115cd8b95b44b856a7fc01f3 Bug: 171540887 Test: m Merged-In: I3c2563d4ae4e3715d0c6270344ba8f7ef067872f Change-Id: I6c8593712c0e86da139d425ef6240c5004e392e2 --- .../android/server/ConnectivityService.java | 17 ++++------ .../android/server/TestNetworkService.java | 5 +-- .../src/android/net/TestNetworkStackClient.kt | 33 ++++++++----------- .../ConnectivityServiceIntegrationTest.kt | 1 - .../server/ConnectivityServiceTest.java | 4 +-- 5 files changed, 26 insertions(+), 34 deletions(-) diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index 0c1a95111a..adfcacea1a 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -149,7 +149,6 @@ import android.net.NetworkRequest; import android.net.NetworkScore; import android.net.NetworkSpecifier; import android.net.NetworkStack; -import android.net.NetworkStackClient; import android.net.NetworkState; import android.net.NetworkStateSnapshot; import android.net.NetworkTestResultParcelable; @@ -176,13 +175,14 @@ import android.net.VpnTransportInfo; import android.net.metrics.IpConnectivityLog; import android.net.metrics.NetworkEvent; import android.net.netlink.InetDiagMessage; +import android.net.networkstack.ModuleNetworkStackClient; +import android.net.networkstack.NetworkStackClientBase; import android.net.resolv.aidl.DnsHealthEventParcel; import android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener; import android.net.resolv.aidl.Nat64PrefixEventParcel; import android.net.resolv.aidl.PrivateDnsValidationEventParcel; import android.net.shared.PrivateDnsConfig; import android.net.util.MultinetworkPolicyTracker; -import android.net.util.NetdService; import android.os.BatteryStatsManager; import android.os.Binder; import android.os.Build; @@ -1183,10 +1183,10 @@ public class ConnectivityService extends IConnectivityManager.Stub } /** - * Get a reference to the NetworkStackClient. + * Get a reference to the ModuleNetworkStackClient. */ - public NetworkStackClient getNetworkStack() { - return NetworkStackClient.getInstance(); + public NetworkStackClientBase getNetworkStack() { + return ModuleNetworkStackClient.getInstance(null); } /** @@ -1245,7 +1245,8 @@ public class ConnectivityService extends IConnectivityManager.Stub public ConnectivityService(Context context) { this(context, getDnsResolver(context), new IpConnectivityLog(), - NetdService.getInstance(), new Dependencies()); + INetd.Stub.asInterface((IBinder) context.getSystemService(Context.NETD_SERVICE)), + new Dependencies()); } @VisibleForTesting @@ -2988,10 +2989,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } pw.println(); - pw.println("NetworkStackClient logs:"); - pw.increaseIndent(); - NetworkStackClient.getInstance().dump(pw); - pw.decreaseIndent(); pw.println(); pw.println("Permission Monitor:"); diff --git a/service/src/com/android/server/TestNetworkService.java b/service/src/com/android/server/TestNetworkService.java index f5662772f5..09873f4db0 100644 --- a/service/src/com/android/server/TestNetworkService.java +++ b/service/src/com/android/server/TestNetworkService.java @@ -35,7 +35,6 @@ import android.net.NetworkProvider; import android.net.RouteInfo; import android.net.TestNetworkInterface; import android.net.TestNetworkSpecifier; -import android.net.util.NetdService; import android.os.Binder; import android.os.Handler; import android.os.HandlerThread; @@ -86,7 +85,9 @@ class TestNetworkService extends ITestNetworkManager.Stub { mHandler = new Handler(mHandlerThread.getLooper()); mContext = Objects.requireNonNull(context, "missing Context"); - mNetd = Objects.requireNonNull(NetdService.getInstance(), "could not get netd instance"); + mNetd = Objects.requireNonNull( + INetd.Stub.asInterface((IBinder) context.getSystemService(Context.NETD_SERVICE)), + "could not get netd instance"); mCm = mContext.getSystemService(ConnectivityManager.class); mNetworkProvider = new NetworkProvider(mContext, mHandler.getLooper(), TEST_NETWORK_PROVIDER_NAME); diff --git a/tests/integration/src/android/net/TestNetworkStackClient.kt b/tests/integration/src/android/net/TestNetworkStackClient.kt index 01eb514a1c..61ef5bdca4 100644 --- a/tests/integration/src/android/net/TestNetworkStackClient.kt +++ b/tests/integration/src/android/net/TestNetworkStackClient.kt @@ -19,6 +19,7 @@ package android.net import android.content.ComponentName import android.content.Context import android.content.Intent +import android.net.networkstack.NetworkStackClientBase import android.os.IBinder import com.android.server.net.integrationtests.TestNetworkStackService import org.mockito.Mockito.any @@ -29,28 +30,22 @@ import kotlin.test.fail const val TEST_ACTION_SUFFIX = ".Test" -class TestNetworkStackClient(context: Context) : NetworkStackClient(TestDependencies(context)) { +class TestNetworkStackClient(private val context: Context) : NetworkStackClientBase() { // TODO: consider switching to TrackRecord for more expressive checks private val lastCallbacks = HashMap() + private val moduleConnector = ConnectivityModuleConnector { _, action, _, _ -> + val intent = Intent(action) + val serviceName = TestNetworkStackService::class.qualifiedName + ?: fail("TestNetworkStackService name not found") + intent.component = ComponentName(context.packageName, serviceName) + return@ConnectivityModuleConnector intent + }.also { it.init(context) } - private class TestDependencies(private val context: Context) : Dependencies { - override fun addToServiceManager(service: IBinder) = Unit - override fun checkCallerUid() = Unit - - override fun getConnectivityModuleConnector(): ConnectivityModuleConnector { - return ConnectivityModuleConnector { _, _, _, inSystemProcess -> - getNetworkStackIntent(inSystemProcess) - }.also { it.init(context) } - } - - private fun getNetworkStackIntent(inSystemProcess: Boolean): Intent? { - // Simulate out-of-system-process config: in-process service not found (null intent) - if (inSystemProcess) return null - val intent = Intent(INetworkStackConnector::class.qualifiedName + TEST_ACTION_SUFFIX) - val serviceName = TestNetworkStackService::class.qualifiedName - ?: fail("TestNetworkStackService name not found") - intent.component = ComponentName(context.packageName, serviceName) - return intent + fun start() { + moduleConnector.startModuleService( + INetworkStackConnector::class.qualifiedName + TEST_ACTION_SUFFIX, + NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) { connector -> + onNetworkStackConnected(INetworkStackConnector.Stub.asInterface(connector)) } } diff --git a/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt b/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt index b6e42743e2..e039ef0725 100644 --- a/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt +++ b/tests/integration/src/com/android/server/net/integrationtests/ConnectivityServiceIntegrationTest.kt @@ -157,7 +157,6 @@ class ConnectivityServiceIntegrationTest { doReturn(IntArray(0)).`when`(systemConfigManager).getSystemPermissionUids(anyString()) networkStackClient = TestNetworkStackClient(realContext) - networkStackClient.init() networkStackClient.start() service = TestConnectivityService(makeDependencies()) diff --git a/tests/unit/java/com/android/server/ConnectivityServiceTest.java b/tests/unit/java/com/android/server/ConnectivityServiceTest.java index 1b4f8364b5..04e63fc626 100644 --- a/tests/unit/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/unit/java/com/android/server/ConnectivityServiceTest.java @@ -228,7 +228,6 @@ import android.net.NetworkRequest; import android.net.NetworkScore; import android.net.NetworkSpecifier; import android.net.NetworkStack; -import android.net.NetworkStackClient; import android.net.NetworkStateSnapshot; import android.net.NetworkTestResultParcelable; import android.net.OemNetworkPreferences; @@ -248,6 +247,7 @@ import android.net.Uri; import android.net.VpnManager; import android.net.VpnTransportInfo; import android.net.metrics.IpConnectivityLog; +import android.net.networkstack.NetworkStackClientBase; import android.net.resolv.aidl.Nat64PrefixEventParcel; import android.net.resolv.aidl.PrivateDnsValidationEventParcel; import android.net.shared.NetworkMonitorUtils; @@ -461,7 +461,7 @@ public class ConnectivityServiceTest { @Mock NetworkStatsManager mStatsManager; @Mock IDnsResolver mMockDnsResolver; @Mock INetd mMockNetd; - @Mock NetworkStackClient mNetworkStack; + @Mock NetworkStackClientBase mNetworkStack; @Mock PackageManager mPackageManager; @Mock UserManager mUserManager; @Mock NotificationManager mNotificationManager;