From 9a57acfbb5c638473729bc3d000ded5f1520183d Mon Sep 17 00:00:00 2001 From: Aaron Huang Date: Tue, 8 Dec 2020 10:03:29 +0800 Subject: [PATCH] Have NetworkPolicyManagerService create MultipathPolicyTracker To make connectivity service mainline, this patch makes MultipathPolicyTracker as a submodule of NetworkPolicyManagerService to remove the dependencies of ConnectivityService. Bug: 175015282 Test: FrameworksNetTests Change-Id: I82a7c62069ffd0683deb2f5ce2f99de120a2a16f --- .../android/server/ConnectivityService.java | 37 ++++++------------- .../server/ConnectivityServiceTest.java | 6 +-- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 01ef69b665..542d043379 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -201,7 +201,6 @@ import com.android.server.connectivity.IpConnectivityMetrics; import com.android.server.connectivity.KeepaliveTracker; import com.android.server.connectivity.LingerMonitor; import com.android.server.connectivity.MockableSystemProperties; -import com.android.server.connectivity.MultipathPolicyTracker; import com.android.server.connectivity.NetworkAgentInfo; import com.android.server.connectivity.NetworkDiagnostics; import com.android.server.connectivity.NetworkNotificationManager; @@ -441,11 +440,6 @@ public class ConnectivityService extends IConnectivityManager.Stub */ private static final int EVENT_EXPIRE_NET_TRANSITION_WAKELOCK = 24; - /** - * Used internally to indicate the system is ready. - */ - private static final int EVENT_SYSTEM_READY = 25; - /** * used to add a network request with a pending intent * obj = NetworkRequestInfo @@ -660,9 +654,6 @@ public class ConnectivityService extends IConnectivityManager.Stub @VisibleForTesting final MultinetworkPolicyTracker mMultinetworkPolicyTracker; - @VisibleForTesting - final MultipathPolicyTracker mMultipathPolicyTracker; - @VisibleForTesting final Map mConnectivityDiagnosticsCallbacks = new HashMap<>(); @@ -1167,8 +1158,6 @@ public class ConnectivityService extends IConnectivityManager.Stub mContext, mHandler, () -> rematchForAvoidBadWifiUpdate()); mMultinetworkPolicyTracker.start(); - mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler); - mDnsManager = new DnsManager(mContext, mDnsResolver); registerPrivateDnsSettingsCallbacks(); } @@ -2315,10 +2304,13 @@ public class ConnectivityService extends IConnectivityManager.Stub */ @VisibleForTesting public void systemReadyInternal() { - // Let PermissionMonitor#startMonitoring() running in the beginning of the systemReady - // before MultipathPolicyTracker.start(). Since mApps in PermissionMonitor needs to be - // populated first to ensure that listening network request which is sent by - // MultipathPolicyTracker won't be added NET_CAPABILITY_FOREGROUND capability. + // Since mApps in PermissionMonitor needs to be populated first to ensure that + // listening network request which is sent by MultipathPolicyTracker won't be added + // NET_CAPABILITY_FOREGROUND capability. Thus, MultipathPolicyTracker.start() must + // be called after PermissionMonitor#startMonitoring(). + // Calling PermissionMonitor#startMonitoring() in systemReadyInternal() and the + // MultipathPolicyTracker.start() is called in NetworkPolicyManagerService#systemReady() + // to ensure the tracking will be initialized correctly. mPermissionMonitor.startMonitoring(); mProxyTracker.loadGlobalProxy(); registerNetdEventCallback(); @@ -2337,8 +2329,6 @@ public class ConnectivityService extends IConnectivityManager.Stub // Create network requests for always-on networks. mHandler.sendMessage(mHandler.obtainMessage(EVENT_CONFIGURE_ALWAYS_ON_NETWORKS)); - - mHandler.sendMessage(mHandler.obtainMessage(EVENT_SYSTEM_READY)); } /** @@ -2638,7 +2628,6 @@ public class ConnectivityService extends IConnectivityManager.Stub dumpAvoidBadWifiSettings(pw); pw.println(); - mMultipathPolicyTracker.dump(pw); if (ArrayUtils.contains(args, SHORT_ARG) == false) { pw.println(); @@ -4186,11 +4175,13 @@ public class ConnectivityService extends IConnectivityManager.Stub return ConnectivityManager.MULTIPATH_PREFERENCE_UNMETERED; } - Integer networkPreference = mMultipathPolicyTracker.getMultipathPreference(network); - if (networkPreference != null) { + final NetworkPolicyManager netPolicyManager = + mContext.getSystemService(NetworkPolicyManager.class); + + final int networkPreference = netPolicyManager.getMultipathPreference(network); + if (networkPreference != 0) { return networkPreference; } - return mMultinetworkPolicyTracker.getMeteredMultipathPreference(); } @@ -4294,10 +4285,6 @@ public class ConnectivityService extends IConnectivityManager.Stub mKeepaliveTracker.handleStopKeepalive(nai, slot, reason); break; } - case EVENT_SYSTEM_READY: { - mMultipathPolicyTracker.start(); - break; - } case EVENT_REVALIDATE_NETWORK: { handleReportNetworkConnectivity((Network) msg.obj, msg.arg1, toBool(msg.arg2)); break; diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index a68044a985..a613e5e332 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -4742,11 +4742,9 @@ public class ConnectivityServiceTest { @Test public void testNetworkCallbackMaximum() { - // We can only have 99 callbacks, because MultipathPolicyTracker is - // already one of them. - final int MAX_REQUESTS = 99; + final int MAX_REQUESTS = 100; final int CALLBACKS = 89; - final int INTENTS = 10; + final int INTENTS = 11; assertEquals(MAX_REQUESTS, CALLBACKS + INTENTS); NetworkRequest networkRequest = new NetworkRequest.Builder().build();