import android.net.dhcp.DhcpClient;
import android.net.metrics.IpConnectivityLog;
import android.net.metrics.IpManagerEvent;
+import android.net.util.AvoidBadWifiTracker;
import android.os.INetworkManagementService;
import android.os.Message;
import android.os.RemoteException;
private final NetlinkTracker mNetlinkTracker;
private final WakeupMessage mProvisioningTimeoutAlarm;
private final WakeupMessage mDhcpActionTimeoutAlarm;
+ private final AvoidBadWifiTracker mAvoidBadWifiTracker;
private final LocalLog mLocalLog;
private final IpConnectivityLog mMetricsLog = new IpConnectivityLog();
Log.e(mTag, "Couldn't register NetlinkTracker: " + e.toString());
}
+ mAvoidBadWifiTracker = new AvoidBadWifiTracker(mContext, getHandler());
+
resetLinkProperties();
mProvisioningTimeoutAlarm = new WakeupMessage(mContext, getHandler(),
delta = ProvisioningChange.LOST_PROVISIONING;
}
+ final boolean lostIPv6 = oldLp.isIPv6Provisioned() && !newLp.isIPv6Provisioned();
+ final boolean lostIPv4Address = oldLp.hasIPv4Address() && !newLp.hasIPv4Address();
+ final boolean lostIPv6Router = oldLp.hasIPv6DefaultRoute() && !newLp.hasIPv6DefaultRoute();
+
// Additionally:
//
// Partial configurations (e.g., only an IPv4 address with no DNS
// Because on such a network isProvisioned() will always return false,
// delta will never be LOST_PROVISIONING. So check for loss of
// provisioning here too.
- if ((oldLp.hasIPv4Address() && !newLp.hasIPv4Address()) ||
- (oldLp.isIPv6Provisioned() && !newLp.isIPv6Provisioned())) {
+ if (lostIPv4Address || lostIPv6) {
delta = ProvisioningChange.LOST_PROVISIONING;
}
// If the previous link properties had a global IPv6 address and an
// IPv6 default route then also consider the loss of that default route
// to be a loss of provisioning. See b/27962810.
- if (oldLp.hasGlobalIPv6Address() && oldLp.hasIPv6DefaultRoute() &&
- !newLp.hasIPv6DefaultRoute()) {
+ if (oldLp.hasGlobalIPv6Address() && lostIPv6Router) {
delta = ProvisioningChange.LOST_PROVISIONING;
}
public void notifyLost(InetAddress ip, String logMsg) {
mCallback.onReachabilityLost(logMsg);
}
- });
+ },
+ mAvoidBadWifiTracker);
}
}