Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5b65cf4 authored by lucaslin's avatar lucaslin
Browse files

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
parent fcfec6bf
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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;
+1 −16
Original line number Diff line number Diff line
@@ -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));
    }
+0 −8
Original line number Diff line number Diff line
@@ -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);