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
This commit is contained in:
lucaslin
2021-01-21 19:48:09 +08:00
parent 19d20f7339
commit 37a16d9574
3 changed files with 15 additions and 24 deletions

View File

@@ -8662,6 +8662,20 @@ public class ConnectivityService extends IConnectivityManager.Stub
long timestampNs, int uid) { long timestampNs, int uid) {
mNetworkActivityTracker.setAndReportNetworkActive(isActive, timerLabel, timestampNs); 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; private final LegacyNetworkActivityTracker mNetworkActivityTracker;

View File

@@ -36,7 +36,6 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.net.module.util.NetworkStackConstants; import com.android.net.module.util.NetworkStackConstants;
import com.android.server.net.BaseNetworkObserver;
import java.net.Inet6Address; import java.net.Inet6Address;
import java.util.Objects; import java.util.Objects;
@@ -48,7 +47,7 @@ import java.util.Objects;
* *
* @hide * @hide
*/ */
public class Nat464Xlat extends BaseNetworkObserver { public class Nat464Xlat {
private static final String TAG = Nat464Xlat.class.getSimpleName(); private static final String TAG = Nat464Xlat.class.getSimpleName();
// This must match the interface prefix in clatd.c. // This must match the interface prefix in clatd.c.
@@ -174,13 +173,6 @@ public class Nat464Xlat extends BaseNetworkObserver {
* and set internal state. * and set internal state.
*/ */
private void enterStartingState(String baseIface) { 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(); mNat64PrefixInUse = selectNat64Prefix();
String addrStr = null; String addrStr = null;
try { try {
@@ -216,11 +208,6 @@ public class Nat464Xlat extends BaseNetworkObserver {
* Unregister as a base observer for the stacked interface, and clear internal state. * Unregister as a base observer for the stacked interface, and clear internal state.
*/ */
private void leaveStartedState() { private void leaveStartedState() {
try {
mNMService.unregisterObserver(this);
} catch (RemoteException | IllegalStateException e) {
Log.e(TAG, "Error unregistering clatd observer on " + mBaseIface + ": " + e);
}
mNat64PrefixInUse = null; mNat64PrefixInUse = null;
mIface = null; mIface = null;
mBaseIface = null; mBaseIface = null;
@@ -507,12 +494,10 @@ public class Nat464Xlat extends BaseNetworkObserver {
stop(); stop();
} }
@Override
public void interfaceLinkStateChanged(String iface, boolean up) { public void interfaceLinkStateChanged(String iface, boolean up) {
mNetwork.handler().post(() -> { handleInterfaceLinkStateChanged(iface, up); }); mNetwork.handler().post(() -> { handleInterfaceLinkStateChanged(iface, up); });
} }
@Override
public void interfaceRemoved(String iface) { public void interfaceRemoved(String iface) {
mNetwork.handler().post(() -> handleInterfaceRemoved(iface)); mNetwork.handler().post(() -> handleInterfaceRemoved(iface));
} }

View File

@@ -206,7 +206,6 @@ public class Nat464XlatTest {
// Start clat. // Start clat.
nat.start(); nat.start();
verify(mNms).registerObserver(eq(nat));
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// Stacked interface up notification arrives. // Stacked interface up notification arrives.
@@ -225,7 +224,6 @@ public class Nat464XlatTest {
verify(mNetd).clatdStop(eq(BASE_IFACE)); verify(mNetd).clatdStop(eq(BASE_IFACE));
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture()); verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
verify(mNms).unregisterObserver(eq(nat));
assertTrue(c.getValue().getStackedLinks().isEmpty()); assertTrue(c.getValue().getStackedLinks().isEmpty());
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
@@ -346,7 +344,6 @@ public class Nat464XlatTest {
nat.start(); nat.start();
verify(mNms).registerObserver(eq(nat));
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// Stacked interface up notification arrives. // Stacked interface up notification arrives.
@@ -365,7 +362,6 @@ public class Nat464XlatTest {
verify(mNetd).clatdStop(eq(BASE_IFACE)); verify(mNetd).clatdStop(eq(BASE_IFACE));
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture()); verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
verify(mNms).unregisterObserver(eq(nat));
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
assertTrue(c.getValue().getStackedLinks().isEmpty()); assertTrue(c.getValue().getStackedLinks().isEmpty());
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE)); assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
@@ -386,7 +382,6 @@ public class Nat464XlatTest {
nat.start(); nat.start();
verify(mNms).registerObserver(eq(nat));
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...) // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
@@ -394,7 +389,6 @@ public class Nat464XlatTest {
nat.stop(); nat.stop();
verify(mNetd).clatdStop(eq(BASE_IFACE)); verify(mNetd).clatdStop(eq(BASE_IFACE));
verify(mNms).unregisterObserver(eq(nat));
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
assertIdle(nat); assertIdle(nat);
@@ -430,7 +424,6 @@ public class Nat464XlatTest {
nat.start(); nat.start();
verify(mNms).registerObserver(eq(nat));
verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX)); verify(mNetd).clatdStart(eq(BASE_IFACE), eq(NAT64_PREFIX));
// ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...) // ConnectivityService immediately stops clat (Network disconnects, IPv4 addr appears, ...)
@@ -438,7 +431,6 @@ public class Nat464XlatTest {
nat.stop(); nat.stop();
verify(mNetd).clatdStop(eq(BASE_IFACE)); verify(mNetd).clatdStop(eq(BASE_IFACE));
verify(mNms).unregisterObserver(eq(nat));
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID)); verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
assertIdle(nat); assertIdle(nat);