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
This commit is contained in:
Aaron Huang
2020-12-08 10:03:29 +08:00
parent 479e613095
commit 9a57acfbb5
2 changed files with 14 additions and 29 deletions

View File

@@ -201,7 +201,6 @@ import com.android.server.connectivity.IpConnectivityMetrics;
import com.android.server.connectivity.KeepaliveTracker; import com.android.server.connectivity.KeepaliveTracker;
import com.android.server.connectivity.LingerMonitor; import com.android.server.connectivity.LingerMonitor;
import com.android.server.connectivity.MockableSystemProperties; import com.android.server.connectivity.MockableSystemProperties;
import com.android.server.connectivity.MultipathPolicyTracker;
import com.android.server.connectivity.NetworkAgentInfo; import com.android.server.connectivity.NetworkAgentInfo;
import com.android.server.connectivity.NetworkDiagnostics; import com.android.server.connectivity.NetworkDiagnostics;
import com.android.server.connectivity.NetworkNotificationManager; 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; 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 * used to add a network request with a pending intent
* obj = NetworkRequestInfo * obj = NetworkRequestInfo
@@ -660,9 +654,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
@VisibleForTesting @VisibleForTesting
final MultinetworkPolicyTracker mMultinetworkPolicyTracker; final MultinetworkPolicyTracker mMultinetworkPolicyTracker;
@VisibleForTesting
final MultipathPolicyTracker mMultipathPolicyTracker;
@VisibleForTesting @VisibleForTesting
final Map<IBinder, ConnectivityDiagnosticsCallbackInfo> mConnectivityDiagnosticsCallbacks = final Map<IBinder, ConnectivityDiagnosticsCallbackInfo> mConnectivityDiagnosticsCallbacks =
new HashMap<>(); new HashMap<>();
@@ -1167,8 +1158,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
mContext, mHandler, () -> rematchForAvoidBadWifiUpdate()); mContext, mHandler, () -> rematchForAvoidBadWifiUpdate());
mMultinetworkPolicyTracker.start(); mMultinetworkPolicyTracker.start();
mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler);
mDnsManager = new DnsManager(mContext, mDnsResolver); mDnsManager = new DnsManager(mContext, mDnsResolver);
registerPrivateDnsSettingsCallbacks(); registerPrivateDnsSettingsCallbacks();
} }
@@ -2315,10 +2304,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/ */
@VisibleForTesting @VisibleForTesting
public void systemReadyInternal() { public void systemReadyInternal() {
// Let PermissionMonitor#startMonitoring() running in the beginning of the systemReady // Since mApps in PermissionMonitor needs to be populated first to ensure that
// before MultipathPolicyTracker.start(). Since mApps in PermissionMonitor needs to be // listening network request which is sent by MultipathPolicyTracker won't be added
// populated first to ensure that listening network request which is sent by // NET_CAPABILITY_FOREGROUND capability. Thus, MultipathPolicyTracker.start() must
// MultipathPolicyTracker won't be added NET_CAPABILITY_FOREGROUND capability. // 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(); mPermissionMonitor.startMonitoring();
mProxyTracker.loadGlobalProxy(); mProxyTracker.loadGlobalProxy();
registerNetdEventCallback(); registerNetdEventCallback();
@@ -2337,8 +2329,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
// Create network requests for always-on networks. // Create network requests for always-on networks.
mHandler.sendMessage(mHandler.obtainMessage(EVENT_CONFIGURE_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); dumpAvoidBadWifiSettings(pw);
pw.println(); pw.println();
mMultipathPolicyTracker.dump(pw);
if (ArrayUtils.contains(args, SHORT_ARG) == false) { if (ArrayUtils.contains(args, SHORT_ARG) == false) {
pw.println(); pw.println();
@@ -4186,11 +4175,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
return ConnectivityManager.MULTIPATH_PREFERENCE_UNMETERED; return ConnectivityManager.MULTIPATH_PREFERENCE_UNMETERED;
} }
Integer networkPreference = mMultipathPolicyTracker.getMultipathPreference(network); final NetworkPolicyManager netPolicyManager =
if (networkPreference != null) { mContext.getSystemService(NetworkPolicyManager.class);
final int networkPreference = netPolicyManager.getMultipathPreference(network);
if (networkPreference != 0) {
return networkPreference; return networkPreference;
} }
return mMultinetworkPolicyTracker.getMeteredMultipathPreference(); return mMultinetworkPolicyTracker.getMeteredMultipathPreference();
} }
@@ -4294,10 +4285,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
mKeepaliveTracker.handleStopKeepalive(nai, slot, reason); mKeepaliveTracker.handleStopKeepalive(nai, slot, reason);
break; break;
} }
case EVENT_SYSTEM_READY: {
mMultipathPolicyTracker.start();
break;
}
case EVENT_REVALIDATE_NETWORK: { case EVENT_REVALIDATE_NETWORK: {
handleReportNetworkConnectivity((Network) msg.obj, msg.arg1, toBool(msg.arg2)); handleReportNetworkConnectivity((Network) msg.obj, msg.arg1, toBool(msg.arg2));
break; break;

View File

@@ -4742,11 +4742,9 @@ public class ConnectivityServiceTest {
@Test @Test
public void testNetworkCallbackMaximum() { public void testNetworkCallbackMaximum() {
// We can only have 99 callbacks, because MultipathPolicyTracker is final int MAX_REQUESTS = 100;
// already one of them.
final int MAX_REQUESTS = 99;
final int CALLBACKS = 89; final int CALLBACKS = 89;
final int INTENTS = 10; final int INTENTS = 11;
assertEquals(MAX_REQUESTS, CALLBACKS + INTENTS); assertEquals(MAX_REQUESTS, CALLBACKS + INTENTS);
NetworkRequest networkRequest = new NetworkRequest.Builder().build(); NetworkRequest networkRequest = new NetworkRequest.Builder().build();