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

Commit fe836ab6 authored by Erik Kline's avatar Erik Kline Committed by android-build-merger
Browse files

Merge "Tighten up neighbor timers if IpReachabilityMonitor is in use" am: 08d7a208 am: 5225d856

am: 1221c494

Change-Id: Ibb3be59847aca3d5e59056d059b27f0ca70fac32
parents 1003f75b 1221c494
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -1384,6 +1384,20 @@ public class IpClient extends StateMachine {
    }

    private boolean startIpReachabilityMonitor() {
        try {
            // TODO: Fetch these parameters from settings, and install a
            // settings observer to watch for update and re-program these
            // parameters (Q: is this level of dynamic updatability really
            // necessary or does reading from settings at startup suffice?).
            final int NUM_SOLICITS = 5;
            final int INTER_SOLICIT_INTERVAL_MS = 750;
            setNeighborParameters(mDependencies.getNetd(), mInterfaceName,
                    NUM_SOLICITS, INTER_SOLICIT_INTERVAL_MS);
        } catch (Exception e) {
            mLog.e("Failed to adjust neighbor parameters", e);
            // Carry on using the system defaults (currently: 3, 1000);
        }

        try {
            mIpReachabilityMonitor = new IpReachabilityMonitor(
                    mContext,
@@ -1863,6 +1877,20 @@ public class IpClient extends StateMachine {
        }
    }

    private static void setNeighborParameters(
            INetd netd, String ifName, int num_solicits, int inter_solicit_interval_ms)
            throws RemoteException, IllegalArgumentException {
        Preconditions.checkNotNull(netd);
        Preconditions.checkArgument(!TextUtils.isEmpty(ifName));
        Preconditions.checkArgument(num_solicits > 0);
        Preconditions.checkArgument(inter_solicit_interval_ms > 0);

        for (int family : new Integer[]{INetd.IPV4, INetd.IPV6}) {
            netd.setProcSysNet(family, INetd.NEIGH, ifName, "retrans_time_ms", Integer.toString(inter_solicit_interval_ms));
            netd.setProcSysNet(family, INetd.NEIGH, ifName, "ucast_solicit", Integer.toString(num_solicits));
        }
    }

    // TODO: extract out into CollectionUtils.
    static <T> boolean any(Iterable<T> coll, Predicate<T> fn) {
        for (T t : coll) {