Revert "Refactor onIpv6AddressRemoved callback in IpClient." This reverts commit efdd91cfa7271cb73b96011fefee118d9d401450. Reason for revert: <aosp/2846095 introduces CompareResults method to check if one IPv6 address has been removed, but that way also introduce the flakiness, revert this CL to fix the flaky tests first> Change-Id: I56e41cfe005881b99da5fade90a27514bda5a7ce
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java index 56e85bd..1cc2278 100644 --- a/src/android/net/ip/IpClient.java +++ b/src/android/net/ip/IpClient.java
@@ -961,6 +961,23 @@ } @Override + public void onIpv6AddressRemoved(final Inet6Address address) { + // The update of Gratuitous NA target addresses set or unsolicited + // multicast NS source addresses set should be only accessed from the + // handler thread of IpClient StateMachine, keeping the behaviour + // consistent with relying on the non-blocking NetworkObserver callbacks, + // see {@link registerObserverForNonblockingCallback}. This can be done + // by either sending a message to StateMachine or posting a handler. + if (address.isLinkLocalAddress()) return; + getHandler().post(() -> { + mLog.log("Remove IPv6 GUA " + address + + " from both Gratuituous NA and Multicast NS sets"); + mGratuitousNaTargetAddresses.remove(address); + mMulticastNsSourceAddresses.remove(address); + }); + } + + @Override public void onClatInterfaceStateUpdate(boolean add) { // TODO: when clat interface was removed, consider sending a message to // the IpClient main StateMachine thread, in case "NDO enabled" state @@ -1748,18 +1765,7 @@ final IpPrefix prefix = new IpPrefix(la.getAddress(), RFC7421_PREFIX_LENGTH); mDelegatedPrefixes.remove(prefix); } - // Also remove the global IPv6 address from the Gratuitous NA target addresses set or - // unsolicited multicast NS source addresses set if the address is present. - if (la.isIpv6()) { - final Inet6Address address = (Inet6Address) la.getAddress(); - if (address.isLinkLocalAddress()) continue; - if (DBG) { - mLog.log("Remove IPv6 GUA " + address - + " from Gratuituous NA and Multicast NS sets"); - } - mGratuitousNaTargetAddresses.remove(address); - mMulticastNsSourceAddresses.remove(address); - } + // TODO: remove onIpv6AddressRemoved callback. } // [3] Add in data from DHCPv4, if available.
diff --git a/src/android/net/ip/IpClientLinkObserver.java b/src/android/net/ip/IpClientLinkObserver.java index 9f27e02..2068caa 100644 --- a/src/android/net/ip/IpClientLinkObserver.java +++ b/src/android/net/ip/IpClientLinkObserver.java
@@ -122,6 +122,13 @@ void update(boolean linkState); /** + * Called when an IPv6 address was removed from the interface. + * + * @param addr The removed IPv6 address. + */ + void onIpv6AddressRemoved(Inet6Address addr); + + /** * Called when the clat interface was added/removed. * * @param add True: clat interface was added. @@ -325,6 +332,10 @@ } if (changed) { mCallback.update(linkState); + if (!add && address.isIpv6()) { + final Inet6Address addr = (Inet6Address) address.getAddress(); + mCallback.onIpv6AddressRemoved(addr); + } } return changed; }
diff --git a/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java b/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java index dc06fe1..84e8151 100644 --- a/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java +++ b/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java
@@ -5438,7 +5438,6 @@ mNetd.getProcSysNet(INetd.IPV6, INetd.CONF, mIfaceName, "accept_ra_defrtr")); assertEquals(1, acceptRaDefRtr); } - private void runDhcpDomainSearchListOptionTest(final String domainName, final List<String> domainSearchList, final String expectedDomain) throws Exception { when(mResources.getBoolean(R.bool.config_dhcp_client_domain_search_list)).thenReturn(true);