X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=services%2Fnet%2Fjava%2Fandroid%2Fnet%2Fip%2FIpManager.java;h=de2c0c6a268be9f94c80355875a92558854cbbc5;hb=b77b77521373b9de0b79a96fca1e4b1857a140b1;hp=654ef18f9608f60b1c39deed91b26372d69c49a5;hpb=e91b3932e079339b5e8d5b1da8d7c18b20b51b9c;p=android-x86%2Fframeworks-base.git diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java index 654ef18f9608..de2c0c6a268b 100644 --- a/services/net/java/android/net/ip/IpManager.java +++ b/services/net/java/android/net/ip/IpManager.java @@ -33,6 +33,7 @@ import android.net.StaticIpConfiguration; 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; @@ -393,6 +394,7 @@ public class IpManager extends StateMachine { 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(); @@ -466,6 +468,8 @@ public class IpManager extends StateMachine { Log.e(mTag, "Couldn't register NetlinkTracker: " + e.toString()); } + mAvoidBadWifiTracker = new AvoidBadWifiTracker(mContext, getHandler()); + resetLinkProperties(); mProvisioningTimeoutAlarm = new WakeupMessage(mContext, getHandler(), @@ -680,6 +684,10 @@ public class IpManager extends StateMachine { 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 @@ -692,8 +700,7 @@ public class IpManager extends StateMachine { // 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; } @@ -702,8 +709,7 @@ public class IpManager extends StateMachine { // 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; } @@ -1064,7 +1070,8 @@ public class IpManager extends StateMachine { public void notifyLost(InetAddress ip, String logMsg) { mCallback.onReachabilityLost(logMsg); } - }); + }, + mAvoidBadWifiTracker); } }