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

Commit f8d3be37 authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Automerger Merge Worker
Browse files

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

Merge "Don't start clatd if disabled by vendor property." am: a517079d am: c147019a am: 67b99e7b

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1625702

MUST ONLY BE SUBMITTED BY AUTOMERGER

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

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


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


    private static NetworkCapabilities createDefaultNetworkCapabilitiesForUid(int uid) {
    private static NetworkCapabilities createDefaultNetworkCapabilitiesForUid(int uid) {
@@ -6148,7 +6152,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        final NetworkAgentInfo nai = new NetworkAgentInfo(na,
        final NetworkAgentInfo nai = new NetworkAgentInfo(na,
                new Network(mNetIdManager.reserveNetId()), new NetworkInfo(networkInfo), lp, nc,
                new Network(mNetIdManager.reserveNetId()), new NetworkInfo(networkInfo), lp, nc,
                currentScore, mContext, mTrackerHandler, new NetworkAgentConfig(networkAgentConfig),
                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.
        // Make sure the LinkProperties and NetworkCapabilities reflect what the agent info says.
        processCapabilitiesFromAgent(nai, nc);
        processCapabilitiesFromAgent(nai, nc);
+17 −4
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.server.connectivity;
package com.android.server.connectivity;


import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;

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


import android.annotation.NonNull;
import android.annotation.NonNull;
@@ -35,6 +37,7 @@ 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.ConnectivityService;


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


    private boolean mEnableClatOnCellular;
    private boolean mPrefixDiscoveryRunning;
    private boolean mPrefixDiscoveryRunning;


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


    /**
    /**
@@ -111,7 +117,7 @@ public class Nat464Xlat {
     * @return true if the network requires clat, false otherwise.
     * @return true if the network requires clat, false otherwise.
     */
     */
    @VisibleForTesting
    @VisibleForTesting
    protected static boolean requiresClat(NetworkAgentInfo nai) {
    protected boolean requiresClat(NetworkAgentInfo nai) {
        // TODO: migrate to NetworkCapabilities.TRANSPORT_*.
        // TODO: migrate to NetworkCapabilities.TRANSPORT_*.
        final boolean supported = contains(NETWORK_TYPES, nai.networkInfo.getType());
        final boolean supported = contains(NETWORK_TYPES, nai.networkInfo.getType());
        final boolean connected = contains(NETWORK_STATES, nai.networkInfo.getState());
        final boolean connected = contains(NETWORK_STATES, nai.networkInfo.getState());
@@ -126,7 +132,9 @@ public class Nat464Xlat {
        final boolean skip464xlat = (nai.netAgentConfig() != null)
        final boolean skip464xlat = (nai.netAgentConfig() != null)
                && nai.netAgentConfig().skip464xlat;
                && 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.
     * @return true if the network should start clat, false otherwise.
     */
     */
    @VisibleForTesting
    @VisibleForTesting
    protected static boolean shouldStartClat(NetworkAgentInfo nai) {
    protected boolean shouldStartClat(NetworkAgentInfo nai) {
        LinkProperties lp = nai.linkProperties;
        LinkProperties lp = nai.linkProperties;
        return requiresClat(nai) && lp != null && lp.getNat64Prefix() != null;
        return requiresClat(nai) && lp != null && lp.getNat64Prefix() != null;
    }
    }
@@ -507,4 +515,9 @@ public class Nat464Xlat {
    protected int getNetId() {
    protected int getNetId() {
        return mNetwork.network.getNetId();
        return mNetwork.network.getNetId();
    }
    }

    @VisibleForTesting
    protected boolean isCellular464XlatEnabled() {
        return mEnableClatOnCellular;
    }
}
}
+2 −2
Original line number Original line 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,
            @NonNull LinkProperties lp, @NonNull NetworkCapabilities nc, int score, Context context,
            Handler handler, NetworkAgentConfig config, ConnectivityService connService, INetd netd,
            Handler handler, NetworkAgentConfig config, ConnectivityService connService, INetd netd,
            IDnsResolver dnsResolver, int factorySerialNumber, int creatorUid,
            IDnsResolver dnsResolver, int factorySerialNumber, int creatorUid,
            QosCallbackTracker qosCallbackTracker) {
            QosCallbackTracker qosCallbackTracker, ConnectivityService.Dependencies deps) {
        Objects.requireNonNull(net);
        Objects.requireNonNull(net);
        Objects.requireNonNull(info);
        Objects.requireNonNull(info);
        Objects.requireNonNull(lp);
        Objects.requireNonNull(lp);
@@ -355,7 +355,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
        linkProperties = lp;
        linkProperties = lp;
        networkCapabilities = nc;
        networkCapabilities = nc;
        mScore = score;
        mScore = score;
        clatd = new Nat464Xlat(this, netd, dnsResolver);
        clatd = new Nat464Xlat(this, netd, dnsResolver, deps);
        mConnService = connService;
        mConnService = connService;
        mContext = context;
        mContext = context;
        mHandler = handler;
        mHandler = handler;
+42 −2
Original line number Original line Diff line number Diff line
@@ -1530,6 +1530,7 @@ public class ConnectivityServiceTest {
                    inv.getArgument(0), inv.getArgument(1), inv.getArgument(2));
                    inv.getArgument(0), inv.getArgument(1), inv.getArgument(2));
            return mPolicyTracker;
            return mPolicyTracker;
        }).when(deps).makeMultinetworkPolicyTracker(any(), any(), any());
        }).when(deps).makeMultinetworkPolicyTracker(any(), any(), any());
        doReturn(true).when(deps).getCellular464XlatEnabled();
        return deps;
        return deps;
    }
    }
@@ -8323,6 +8324,45 @@ public class ConnectivityServiceTest {
        mCm.unregisterNetworkCallback(callback);
        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
    @Test
    public void testDataActivityTracking() throws Exception {
    public void testDataActivityTracking() throws Exception {
        final TestNetworkCallback networkCallback = new TestNetworkCallback();
        final TestNetworkCallback networkCallback = new TestNetworkCallback();
@@ -9029,7 +9069,7 @@ public class ConnectivityServiceTest {
                TelephonyManager.getNetworkTypeName(TelephonyManager.NETWORK_TYPE_LTE));
                TelephonyManager.getNetworkTypeName(TelephonyManager.NETWORK_TYPE_LTE));
        return new NetworkAgentInfo(null, new Network(NET_ID), info, new LinkProperties(),
        return new NetworkAgentInfo(null, new Network(NET_ID), info, new LinkProperties(),
                nc, 0, mServiceContext, null, new NetworkAgentConfig(), mService, null, null, 0,
                nc, 0, mServiceContext, null, new NetworkAgentConfig(), mService, null, null, 0,
                INVALID_UID, mQosCallbackTracker);
                INVALID_UID, mQosCallbackTracker, new ConnectivityService.Dependencies());
    }
    }
    @Test
    @Test
+1 −1
Original line number Original line Diff line number Diff line
@@ -357,7 +357,7 @@ public class LingerMonitorTest {
        NetworkAgentInfo nai = new NetworkAgentInfo(null, new Network(netId), info,
        NetworkAgentInfo nai = new NetworkAgentInfo(null, new Network(netId), info,
                new LinkProperties(), caps, 50, mCtx, null, new NetworkAgentConfig() /* config */,
                new LinkProperties(), caps, 50, mCtx, null, new NetworkAgentConfig() /* config */,
                mConnService, mNetd, mDnsResolver, NetworkProvider.ID_NONE, Binder.getCallingUid(),
                mConnService, mNetd, mDnsResolver, NetworkProvider.ID_NONE, Binder.getCallingUid(),
                mQosCallbackTracker);
                mQosCallbackTracker, new ConnectivityService.Dependencies());
        nai.everValidated = true;
        nai.everValidated = true;
        return nai;
        return nai;
    }
    }
Loading