Also treat loss of IPv6 as a loss of provisioning.

Bug: 23226635
Change-Id: Icebb7d83ed5b3b796901b9f023909a02eb461941
This commit is contained in:
Erik Kline
2015-08-14 12:16:55 +09:00
parent 44e6ace9c3
commit aa8f8f33b5
2 changed files with 10 additions and 2 deletions

View File

@@ -119,8 +119,12 @@ public final class LinkProperties implements Parcelable {
//
// For one such example of this, see b/18867306.
//
// TODO: Remove this special case altogether.
if (before.isIPv4Provisioned() && !after.isIPv4Provisioned()) {
// Additionally, losing IPv6 provisioning can result in TCP
// connections getting stuck until timeouts fire and other
// baffling failures. Therefore, loss of either IPv4 or IPv6 on a
// previously dualstack network is deemed a lost of provisioning.
if ((before.isIPv4Provisioned() && !after.isIPv4Provisioned()) ||
(before.isIPv6Provisioned() && !after.isIPv6Provisioned())) {
return ProvisioningChange.LOST_PROVISIONING;
}
return ProvisioningChange.STILL_PROVISIONED;

View File

@@ -560,10 +560,14 @@ public class LinkPropertiesTest extends TestCase {
assertTrue(v46lp.isIPv6Provisioned());
assertTrue(v46lp.isProvisioned());
assertEquals(ProvisioningChange.STILL_PROVISIONED,
LinkProperties.compareProvisioning(v4lp, v46lp));
assertEquals(ProvisioningChange.STILL_PROVISIONED,
LinkProperties.compareProvisioning(v6lp, v46lp));
assertEquals(ProvisioningChange.LOST_PROVISIONING,
LinkProperties.compareProvisioning(v46lp, v6lp));
assertEquals(ProvisioningChange.LOST_PROVISIONING,
LinkProperties.compareProvisioning(v46lp, v4lp));
// Check that losing and gaining a secondary router does not change
// the provisioning status.