Merge "Tighten up neighbor timers if IpReachabilityMonitor is in use"
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user