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

Commit a517079d authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Gerrit Code Review
Browse files

Merge "Don't start clatd if disabled by vendor property."

parents 7bc8d20b 305b301f
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.sysprop.NetworkProperties;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -1073,6 +1074,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
                    context.getSystemService(BatteryStatsManager.class);
            batteryStats.reportNetworkInterfaceForTransports(iface, transportTypes);
        }

        public boolean getCellular464XlatEnabled() {
            return NetworkProperties.isCellular464XlatEnabled().orElse(true);
        }
    }

    public ConnectivityService(Context context) {
@@ -1271,8 +1276,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
                new NetworkInfo(TYPE_NONE, 0, "", ""),
                new LinkProperties(), new NetworkCapabilities(), 0, mContext,
                null, new NetworkAgentConfig(), this, null,
                null, 0, INVALID_UID,
                mQosCallbackTracker);
                null, 0, INVALID_UID, mQosCallbackTracker, mDeps);
    }

    private static NetworkCapabilities createDefaultNetworkCapabilitiesForUid(int uid) {
@@ -6148,7 +6152,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        final NetworkAgentInfo nai = new NetworkAgentInfo(na,
                new Network(mNetIdManager.reserveNetId()), new NetworkInfo(networkInfo), lp, nc,
                currentScore, mContext, mTrackerHandler, new NetworkAgentConfig(networkAgentConfig),
                this, mNetd, mDnsResolver, providerId, uid, mQosCallbackTracker);
                this, mNetd, mDnsResolver, providerId, uid, mQosCallbackTracker, mDeps);

        // Make sure the LinkProperties and NetworkCapabilities reflect what the agent info says.
        processCapabilitiesFromAgent(nai, nc);
+17 −4
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.connectivity;

import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;

import static com.android.net.module.util.CollectionUtils.contains;

import android.annotation.NonNull;
@@ -35,6 +37,7 @@ import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.net.module.util.NetworkStackConstants;
import com.android.server.ConnectivityService;

import java.net.Inet6Address;
import java.util.Objects;
@@ -94,12 +97,15 @@ public class Nat464Xlat {
    private Inet6Address mIPv6Address;
    private State mState = State.IDLE;

    private boolean mEnableClatOnCellular;
    private boolean mPrefixDiscoveryRunning;

    public Nat464Xlat(NetworkAgentInfo nai, INetd netd, IDnsResolver dnsResolver) {
    public Nat464Xlat(NetworkAgentInfo nai, INetd netd, IDnsResolver dnsResolver,
            ConnectivityService.Dependencies deps) {
        mDnsResolver = dnsResolver;
        mNetd = netd;
        mNetwork = nai;
        mEnableClatOnCellular = deps.getCellular464XlatEnabled();
    }

    /**
@@ -111,7 +117,7 @@ public class Nat464Xlat {
     * @return true if the network requires clat, false otherwise.
     */
    @VisibleForTesting
    protected static boolean requiresClat(NetworkAgentInfo nai) {
    protected boolean requiresClat(NetworkAgentInfo nai) {
        // TODO: migrate to NetworkCapabilities.TRANSPORT_*.
        final boolean supported = contains(NETWORK_TYPES, nai.networkInfo.getType());
        final boolean connected = contains(NETWORK_STATES, nai.networkInfo.getState());
@@ -126,7 +132,9 @@ public class Nat464Xlat {
        final boolean skip464xlat = (nai.netAgentConfig() != null)
                && nai.netAgentConfig().skip464xlat;

        return supported && connected && isIpv6OnlyNetwork && !skip464xlat;
        return supported && connected && isIpv6OnlyNetwork && !skip464xlat
            && (nai.networkCapabilities.hasTransport(TRANSPORT_CELLULAR)
                ? isCellular464XlatEnabled() : true);
    }

    /**
@@ -137,7 +145,7 @@ public class Nat464Xlat {
     * @return true if the network should start clat, false otherwise.
     */
    @VisibleForTesting
    protected static boolean shouldStartClat(NetworkAgentInfo nai) {
    protected boolean shouldStartClat(NetworkAgentInfo nai) {
        LinkProperties lp = nai.linkProperties;
        return requiresClat(nai) && lp != null && lp.getNat64Prefix() != null;
    }
@@ -507,4 +515,9 @@ public class Nat464Xlat {
    protected int getNetId() {
        return mNetwork.network.getNetId();
    }

    @VisibleForTesting
    protected boolean isCellular464XlatEnabled() {
        return mEnableClatOnCellular;
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -341,7 +341,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
            @NonNull LinkProperties lp, @NonNull NetworkCapabilities nc, int score, Context context,
            Handler handler, NetworkAgentConfig config, ConnectivityService connService, INetd netd,
            IDnsResolver dnsResolver, int factorySerialNumber, int creatorUid,
            QosCallbackTracker qosCallbackTracker) {
            QosCallbackTracker qosCallbackTracker, ConnectivityService.Dependencies deps) {
        Objects.requireNonNull(net);
        Objects.requireNonNull(info);
        Objects.requireNonNull(lp);
@@ -355,7 +355,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
        linkProperties = lp;
        networkCapabilities = nc;
        mScore = score;
        clatd = new Nat464Xlat(this, netd, dnsResolver);
        clatd = new Nat464Xlat(this, netd, dnsResolver, deps);
        mConnService = connService;
        mContext = context;
        mHandler = handler;
+42 −2
Original line number Diff line number Diff line
@@ -1530,6 +1530,7 @@ public class ConnectivityServiceTest {
                    inv.getArgument(0), inv.getArgument(1), inv.getArgument(2));
            return mPolicyTracker;
        }).when(deps).makeMultinetworkPolicyTracker(any(), any(), any());
        doReturn(true).when(deps).getCellular464XlatEnabled();
        return deps;
    }
@@ -8323,6 +8324,45 @@ public class ConnectivityServiceTest {
        mCm.unregisterNetworkCallback(callback);
    }
    @Test
    public void testWith464XlatDisable() throws Exception {
        doReturn(false).when(mDeps).getCellular464XlatEnabled();
        final TestNetworkCallback callback = new TestNetworkCallback();
        final TestNetworkCallback defaultCallback = new TestNetworkCallback();
        final NetworkRequest networkRequest = new NetworkRequest.Builder()
                .addCapability(NET_CAPABILITY_INTERNET)
                .build();
        mCm.registerNetworkCallback(networkRequest, callback);
        mCm.registerDefaultNetworkCallback(defaultCallback);
        // Bring up validated cell.
        final LinkProperties cellLp = new LinkProperties();
        cellLp.setInterfaceName(MOBILE_IFNAME);
        cellLp.addLinkAddress(new LinkAddress("2001:db8:1::1/64"));
        cellLp.addRoute(new RouteInfo(new IpPrefix("::/0"), null, MOBILE_IFNAME));
        mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
        mCellNetworkAgent.sendLinkProperties(cellLp);
        mCellNetworkAgent.connect(true);
        callback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
        defaultCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
        final int cellNetId = mCellNetworkAgent.getNetwork().netId;
        waitForIdle();
        verify(mMockDnsResolver, never()).startPrefix64Discovery(cellNetId);
        Nat464Xlat clat = getNat464Xlat(mCellNetworkAgent);
        assertTrue("Nat464Xlat was not IDLE", !clat.isStarted());
        // This cannot happen because prefix discovery cannot succeed if it is never started.
        mService.mResolverUnsolEventCallback.onNat64PrefixEvent(
                makeNat64PrefixEvent(cellNetId, PREFIX_OPERATION_ADDED, "64:ff9b::", 96));
        // ... but still, check that even if it did, clatd would not be started.
        verify(mMockNetd, never()).clatdStart(anyString(), anyString());
        assertTrue("Nat464Xlat was not IDLE", !clat.isStarted());
    }
    @Test
    public void testDataActivityTracking() throws Exception {
        final TestNetworkCallback networkCallback = new TestNetworkCallback();
@@ -9029,7 +9069,7 @@ public class ConnectivityServiceTest {
                TelephonyManager.getNetworkTypeName(TelephonyManager.NETWORK_TYPE_LTE));
        return new NetworkAgentInfo(null, new Network(NET_ID), info, new LinkProperties(),
                nc, 0, mServiceContext, null, new NetworkAgentConfig(), mService, null, null, 0,
                INVALID_UID, mQosCallbackTracker);
                INVALID_UID, mQosCallbackTracker, new ConnectivityService.Dependencies());
    }
    @Test
+1 −1
Original line number Diff line number Diff line
@@ -357,7 +357,7 @@ public class LingerMonitorTest {
        NetworkAgentInfo nai = new NetworkAgentInfo(null, new Network(netId), info,
                new LinkProperties(), caps, 50, mCtx, null, new NetworkAgentConfig() /* config */,
                mConnService, mNetd, mDnsResolver, NetworkProvider.ID_NONE, Binder.getCallingUid(),
                mQosCallbackTracker);
                mQosCallbackTracker, new ConnectivityService.Dependencies());
        nai.everValidated = true;
        return nai;
    }
Loading