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

Commit be5d0935 authored by lucaslin's avatar lucaslin Committed by Chiachang Wang
Browse files

[IT05] Remove the unused network activity logic out from NMS

The network activity logic is moved to ConnectivityService.
CS is no longer setting the idle timer via NMS to netd. The
idle timer should only set from CS, so remove the network
activity logic out from NMS.

Bug: 170598012
Test: atest FrameworksNetTests
Change-Id: Ief9e892586aaee8e9542b9313088fa50d1d411e5
parent 7dea3c5c
Loading
Loading
Loading
Loading
+0 −35
Original line number Original line Diff line number Diff line
@@ -24,7 +24,6 @@ import android.net.Network;
import android.net.NetworkStats;
import android.net.NetworkStats;
import android.net.RouteInfo;
import android.net.RouteInfo;
import android.net.UidRange;
import android.net.UidRange;
import android.os.INetworkActivityListener;


/**
/**
 * @hide
 * @hide
@@ -294,25 +293,6 @@ interface INetworkManagementService
    @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
    @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
    boolean isBandwidthControlEnabled();
    boolean isBandwidthControlEnabled();


    /**
     * Sets idletimer for an interface.
     *
     * This either initializes a new idletimer or increases its
     * reference-counting if an idletimer already exists for given
     * {@code iface}.
     *
     * {@code type} is the type of the interface, such as TYPE_MOBILE.
     *
     * Every {@code addIdleTimer} should be paired with a
     * {@link removeIdleTimer} to cleanup when the network disconnects.
     */
    void addIdleTimer(String iface, int timeout, int type);

    /**
     * Removes idletimer for an interface.
     */
    void removeIdleTimer(String iface);

    void setFirewallEnabled(boolean enabled);
    void setFirewallEnabled(boolean enabled);
    boolean isFirewallEnabled();
    boolean isFirewallEnabled();
    void setFirewallInterfaceRule(String iface, boolean allow);
    void setFirewallInterfaceRule(String iface, boolean allow);
@@ -320,21 +300,6 @@ interface INetworkManagementService
    void setFirewallUidRules(int chain, in int[] uids, in int[] rules);
    void setFirewallUidRules(int chain, in int[] uids, in int[] rules);
    void setFirewallChainEnabled(int chain, boolean enable);
    void setFirewallChainEnabled(int chain, boolean enable);


    /**
     * Start listening for mobile activity state changes.
     */
    void registerNetworkActivityListener(INetworkActivityListener listener);

    /**
     * Stop listening for mobile activity state changes.
     */
    void unregisterNetworkActivityListener(INetworkActivityListener listener);

    /**
     * Check whether the mobile radio is currently active.
     */
    boolean isNetworkActive();

    void addLegacyRouteForNetId(int netId, in RouteInfo routeInfo, int uid);
    void addLegacyRouteForNetId(int netId, in RouteInfo routeInfo, int uid);


    /**
    /**
+1 −131
Original line number Original line Diff line number Diff line
@@ -69,7 +69,6 @@ import android.os.BatteryStats;
import android.os.Binder;
import android.os.Binder;
import android.os.Handler;
import android.os.Handler;
import android.os.IBinder;
import android.os.IBinder;
import android.os.INetworkActivityListener;
import android.os.INetworkManagementService;
import android.os.INetworkManagementService;
import android.os.Process;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteCallbackList;
@@ -228,28 +227,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
    @GuardedBy("mQuotaLock")
    @GuardedBy("mQuotaLock")
    private volatile boolean mDataSaverMode;
    private volatile boolean mDataSaverMode;


    private final Object mIdleTimerLock = new Object();
    /** Set of interfaces with active idle timers. */
    private static class IdleTimerParams {
        public final int timeout;
        public final int type;
        public int networkCount;

        IdleTimerParams(int timeout, int type) {
            this.timeout = timeout;
            this.type = type;
            this.networkCount = 1;
        }
    }
    private HashMap<String, IdleTimerParams> mActiveIdleTimers = Maps.newHashMap();

    private volatile boolean mFirewallEnabled;
    private volatile boolean mFirewallEnabled;
    private volatile boolean mStrictEnabled;
    private volatile boolean mStrictEnabled;


    private final RemoteCallbackList<INetworkActivityListener> mNetworkActivityListeners =
            new RemoteCallbackList<>();
    private boolean mNetworkActive;

    /**
    /**
     * Constructs a new NetworkManagementService instance
     * Constructs a new NetworkManagementService instance
     *
     *
@@ -392,20 +372,8 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
     */
     */
    private void notifyInterfaceClassActivity(int type, boolean isActive, long tsNanos,
    private void notifyInterfaceClassActivity(int type, boolean isActive, long tsNanos,
            int uid) {
            int uid) {
        final boolean active = isActive;
        invokeForAllObservers(o -> o.interfaceClassDataActivityChanged(
        invokeForAllObservers(o -> o.interfaceClassDataActivityChanged(
                type, active, tsNanos, uid));
                type, isActive, tsNanos, uid));

        boolean report = false;
        synchronized (mIdleTimerLock) {
            if (mNetworkActive != isActive) {
                mNetworkActive = isActive;
                report = isActive;
            }
        }
        if (report) {
            reportNetworkActive();
        }
    }
    }


    @Override
    @Override
@@ -1081,60 +1049,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
        }
        }
    }
    }


    @Override
    public void addIdleTimer(String iface, int timeout, final int type) {
        NetworkStack.checkNetworkStackPermission(mContext);

        if (DBG) Slog.d(TAG, "Adding idletimer");

        synchronized (mIdleTimerLock) {
            IdleTimerParams params = mActiveIdleTimers.get(iface);
            if (params != null) {
                // the interface already has idletimer, update network count
                params.networkCount++;
                return;
            }

            try {
                mNetdService.idletimerAddInterface(iface, timeout, Integer.toString(type));
            } catch (RemoteException | ServiceSpecificException e) {
                throw new IllegalStateException(e);
            }
            mActiveIdleTimers.put(iface, new IdleTimerParams(timeout, type));

            // Networks start up.
            if (ConnectivityManager.isNetworkTypeMobile(type)) {
                mNetworkActive = false;
            }
            mDaemonHandler.post(() -> notifyInterfaceClassActivity(type, true,
                    SystemClock.elapsedRealtimeNanos(), -1));
        }
    }

    @Override
    public void removeIdleTimer(String iface) {
        NetworkStack.checkNetworkStackPermission(mContext);

        if (DBG) Slog.d(TAG, "Removing idletimer");

        synchronized (mIdleTimerLock) {
            final IdleTimerParams params = mActiveIdleTimers.get(iface);
            if (params == null || --(params.networkCount) > 0) {
                return;
            }

            try {
                mNetdService.idletimerRemoveInterface(iface,
                        params.timeout, Integer.toString(params.type));
            } catch (RemoteException | ServiceSpecificException e) {
                throw new IllegalStateException(e);
            }
            mActiveIdleTimers.remove(iface);
            mDaemonHandler.post(() -> notifyInterfaceClassActivity(params.type, false,
                    SystemClock.elapsedRealtimeNanos(), -1));
        }
    }

    @Override
    @Override
    public void setInterfaceQuota(String iface, long quotaBytes) {
    public void setInterfaceQuota(String iface, long quotaBytes) {
        NetworkStack.checkNetworkStackPermission(mContext);
        NetworkStack.checkNetworkStackPermission(mContext);
@@ -1772,43 +1686,10 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
        }
        }
    }
    }


    @Override
    public void registerNetworkActivityListener(INetworkActivityListener listener) {
        mNetworkActivityListeners.register(listener);
    }

    @Override
    public void unregisterNetworkActivityListener(INetworkActivityListener listener) {
        mNetworkActivityListeners.unregister(listener);
    }

    @Override
    public boolean isNetworkActive() {
        synchronized (mNetworkActivityListeners) {
            return mNetworkActive || mActiveIdleTimers.isEmpty();
        }
    }

    private void reportNetworkActive() {
        final int length = mNetworkActivityListeners.beginBroadcast();
        try {
            for (int i = 0; i < length; i++) {
                try {
                    mNetworkActivityListeners.getBroadcastItem(i).onNetworkActive();
                } catch (RemoteException | RuntimeException e) {
                }
            }
        } finally {
            mNetworkActivityListeners.finishBroadcast();
        }
    }

    @Override
    @Override
    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
        if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;


        pw.print("mNetworkActive="); pw.println(mNetworkActive);

        synchronized (mQuotaLock) {
        synchronized (mQuotaLock) {
            pw.print("Active quota ifaces: "); pw.println(mActiveQuotas.toString());
            pw.print("Active quota ifaces: "); pw.println(mActiveQuotas.toString());
            pw.print("Active alert ifaces: "); pw.println(mActiveAlerts.toString());
            pw.print("Active alert ifaces: "); pw.println(mActiveAlerts.toString());
@@ -1840,17 +1721,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
                    mUidFirewallRestrictedRules);
                    mUidFirewallRestrictedRules);
        }
        }


        synchronized (mIdleTimerLock) {
            pw.println("Idle timers:");
            for (HashMap.Entry<String, IdleTimerParams> ent : mActiveIdleTimers.entrySet()) {
                pw.print("  "); pw.print(ent.getKey()); pw.println(":");
                IdleTimerParams params = ent.getValue();
                pw.print("    timeout="); pw.print(params.timeout);
                pw.print(" type="); pw.print(params.type);
                pw.print(" networkCount="); pw.println(params.networkCount);
            }
        }

        pw.print("Firewall enabled: "); pw.println(mFirewallEnabled);
        pw.print("Firewall enabled: "); pw.println(mFirewallEnabled);
        pw.print("Netd service status: " );
        pw.print("Netd service status: " );
        if (mNetdService == null) {
        if (mNetdService == null) {