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

Commit 08d7a208 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Tighten up neighbor timers if IpReachabilityMonitor is in use"

parents 460a5294 5b43cea3
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) {