Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a34d9a7a authored by Aaron Huang's avatar Aaron Huang Committed by Gerrit Code Review
Browse files

Merge "Have NetworkPolicyManagerService create MultipathPolicyTracker"

parents e41cd291 120dfbbe
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.net;

import android.net.INetworkPolicyListener;
import android.net.Network;
import android.net.NetworkPolicy;
import android.net.NetworkQuotaInfo;
import android.net.NetworkState;
@@ -67,6 +68,8 @@ interface INetworkPolicyManager {
    void setDeviceIdleMode(boolean enabled);
    void setWifiMeteredOverride(String networkId, int meteredOverride);

    int getMultipathPreference(in Network network);

    @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
    NetworkQuotaInfo getNetworkQuotaInfo(in NetworkState state);

+11 −0
Original line number Diff line number Diff line
@@ -432,6 +432,17 @@ public class NetworkPolicyManager {
        }
    }

    /**
     * Get multipath preference for the given network.
     */
    public int getMultipathPreference(Network network) {
        try {
            return mService.getMultipathPreference(network);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /** {@hide} */
    @Deprecated
    public static Iterator<Pair<ZonedDateTime, ZonedDateTime>> cycleIterator(NetworkPolicy policy) {
+12 −25
Original line number Diff line number Diff line
@@ -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<IBinder, ConnectivityDiagnosticsCallbackInfo> 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;
+17 −1
Original line number Diff line number Diff line
@@ -236,6 +236,7 @@ import com.android.server.EventLogTags;
import com.android.server.LocalServices;
import com.android.server.ServiceThread;
import com.android.server.SystemConfig;
import com.android.server.connectivity.MultipathPolicyTracker;
import com.android.server.usage.AppStandbyInternal;
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;

@@ -415,6 +416,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
    private final Clock mClock;
    private final UserManager mUserManager;
    private final CarrierConfigManager mCarrierConfigManager;
    private final MultipathPolicyTracker mMultipathPolicyTracker;

    private IConnectivityManager mConnManager;
    private PowerManagerInternal mPowerManagerInternal;
@@ -655,7 +657,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        mPolicyFile = new AtomicFile(new File(systemDir, "netpolicy.xml"), "net-policy");

        mAppOps = context.getSystemService(AppOpsManager.class);

        mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler);
        // Expose private service for system components to use.
        LocalServices.addService(NetworkPolicyManagerInternal.class,
                new NetworkPolicyManagerInternalImpl());
@@ -923,6 +925,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            if (!initCompleteSignal.await(30, TimeUnit.SECONDS)) {
                throw new IllegalStateException("Service " + TAG +" init timeout");
            }
            mMultipathPolicyTracker.start();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            throw new IllegalStateException("Service " + TAG + " init interrupted", e);
@@ -3458,6 +3461,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        }
    }

    /**
     * Get multipath preference value for the given network.
     */
    public int getMultipathPreference(Network network) {
        final Integer preference = mMultipathPolicyTracker.getMultipathPreference(network);
        if (preference != null) {
            return preference;
        }
        return 0;
    }

    @Override
    protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
        if (!DumpUtils.checkDumpPermission(mContext, TAG, writer)) return;
@@ -3678,6 +3692,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                mLogger.dumpLogs(fout);
            }
        }
        fout.println();
        mMultipathPolicyTracker.dump(fout);
    }

    @Override
+2 −4
Original line number Diff line number Diff line
@@ -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();