From 37a16d9574b907e184881515c96bcadf616f8a14 Mon Sep 17 00:00:00 2001 From: lucaslin Date: Thu, 21 Jan 2021 19:48:09 +0800 Subject: [PATCH] Remove BaseNetworkObserver from Nat464Xlat Let ConnectivityService talk to Nat464Xlat through NetworkAgnetInfo directly: - Nat464Xlat will be created once there is a new network bringing up, but Netd doesn't expose the method for unregistering unsolicited event. - ConnectivityService has already registered netd unsolicited event listener, so Nat464Xlat doesn't need to register unsolicited event listenser by itself, it can get the unsolicited event from ConnectivityService directly. Bug: 174837473 Test: atest FrameworksNetTests Change-Id: I751526e8ffa7d25591696ecd8d93b1585c4c20c7 --- .../com/android/server/ConnectivityService.java | 14 ++++++++++++++ .../android/server/connectivity/Nat464Xlat.java | 17 +---------------- .../server/connectivity/Nat464XlatTest.java | 8 -------- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 383f9a5195..c67379dd6f 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -8662,6 +8662,20 @@ public class ConnectivityService extends IConnectivityManager.Stub long timestampNs, int uid) { mNetworkActivityTracker.setAndReportNetworkActive(isActive, timerLabel, timestampNs); } + + @Override + public void onInterfaceLinkStateChanged(String iface, boolean up) { + for (NetworkAgentInfo nai: mNetworkAgentInfos) { + nai.clatd.interfaceLinkStateChanged(iface, up); + } + } + + @Override + public void onInterfaceRemoved(String iface) { + for (NetworkAgentInfo nai: mNetworkAgentInfos) { + nai.clatd.interfaceRemoved(iface); + } + } } private final LegacyNetworkActivityTracker mNetworkActivityTracker; diff --git a/services/core/java/com/android/server/connectivity/Nat464Xlat.java b/services/core/java/com/android/server/connectivity/Nat464Xlat.java index 641287f0f4..6052a12bdf 100644 --- a/services/core/java/com/android/server/connectivity/Nat464Xlat.java +++ b/services/core/java/com/android/server/connectivity/Nat464Xlat.java @@ -36,7 +36,6 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.net.module.util.NetworkStackConstants; -import com.android.server.net.BaseNetworkObserver; import java.net.Inet6Address; import java.util.Objects; @@ -48,7 +47,7 @@ import java.util.Objects; * * @hide */ -public class Nat464Xlat extends BaseNetworkObserver { +public class Nat464Xlat { private static final String TAG = Nat464Xlat.class.getSimpleName(); // This must match the interface prefix in clatd.c. @@ -174,13 +173,6 @@ public class Nat464Xlat extends BaseNetworkObserver { * and set internal state. */ private void enterStartingState(String baseIface) { - try { - mNMService.registerObserver(this); - } catch (RemoteException e) { - Log.e(TAG, "Can't register iface observer for clat on " + mNetwork.toShortString()); - return; - } - mNat64PrefixInUse = selectNat64Prefix(); String addrStr = null; try { @@ -216,11 +208,6 @@ public class Nat464Xlat extends BaseNetworkObserver { * Unregister as a base observer for the stacked interface, and clear internal state. */ private void leaveStartedState() { - try { - mNMService.unregisterObserver(this); - } catch (RemoteException | IllegalStateException e) { - Log.e(TAG, "Error unregistering clatd observer on " + mBaseIface + ": " + e); - } mNat64PrefixInUse = null; mIface = null; mBaseIface = null; @@ -507,12 +494,10 @@ public class Nat464Xlat extends BaseNetworkObserver { stop(); } - @Override public void interfaceLinkStateChanged(String iface, boolean up) { mNetwork.handler().post(() -> { handleInterfaceLinkStateChanged(iface, up); }); } - @Override public void interfaceRemoved(String iface) { mNetwork.handler().post(() -> handleInterfaceRemoved(iface)); } diff --git a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java index 4f65b67fa3..068de4777e 100644 --- a/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java +++ b/tests/net/java/com/android/server/connectivity/Nat464XlatTest.java @@ -206,7 +206,6 @@ public class Nat464XlatTest { // Start clat. nat.start(); - verify(mNms).registerObserver(eq(nat)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); // Stacked interface up notification arrives. @@ -225,7 +224,6 @@ public class Nat464XlatTest { verify(mNetd).clatdStop(eq(BASE_IFACE)); verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture()); - verify(mNms).unregisterObserver(eq(nat)); assertTrue(c.getValue().getStackedLinks().isEmpty()); assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); @@ -346,7 +344,6 @@ public class Nat464XlatTest { nat.start(); - verify(mNms).registerObserver(eq(nat)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); // Stacked interface up notification arrives. @@ -365,7 +362,6 @@ public class Nat464XlatTest { verify(mNetd).clatdStop(eq(BASE_IFACE)); verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture()); - verify(mNms).unregisterObserver(eq(nat)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); assertTrue(c.getValue().getStackedLinks().isEmpty()); assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); @@ -386,7 +382,6 @@ public class Nat464XlatTest { nat.start(); - verify(mNms).registerObserver(eq(nat)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...) @@ -394,7 +389,6 @@ public class Nat464XlatTest { nat.stop(); verify(mNetd).clatdStop(eq(BASE_IFACE)); - verify(mNms).unregisterObserver(eq(nat)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); assertIdle(nat); @@ -430,7 +424,6 @@ public class Nat464XlatTest { nat.start(); - verify(mNms).registerObserver(eq(nat)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...) @@ -438,7 +431,6 @@ public class Nat464XlatTest { nat.stop(); verify(mNetd).clatdStop(eq(BASE_IFACE)); - verify(mNms).unregisterObserver(eq(nat)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); assertIdle(nat);