Don't start clatd if disabled by vendor property.
Fix: 182333299 Test: new unit tests Change-Id: Ic15dc4fff6a13aa916e3d2dc6203829e96ddeda4
This commit is contained in:
@@ -1533,6 +1533,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;
|
||||
}
|
||||
@@ -8329,6 +8330,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();
|
||||
@@ -9035,7 +9075,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
|
||||
@@ -10992,4 +11032,4 @@ public class ConnectivityServiceTest {
|
||||
verifyNoNetwork();
|
||||
mCm.unregisterNetworkCallback(cellCb);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -16,11 +16,15 @@
|
||||
|
||||
package com.android.server.connectivity;
|
||||
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.anyString;
|
||||
import static org.mockito.Mockito.eq;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
@@ -34,6 +38,7 @@ import android.net.IpPrefix;
|
||||
import android.net.LinkAddress;
|
||||
import android.net.LinkProperties;
|
||||
import android.net.NetworkAgentConfig;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.Handler;
|
||||
import android.os.test.TestLooper;
|
||||
@@ -72,11 +77,15 @@ public class Nat464XlatTest {
|
||||
Handler mHandler;
|
||||
NetworkAgentConfig mAgentConfig = new NetworkAgentConfig();
|
||||
|
||||
Nat464Xlat makeNat464Xlat() {
|
||||
return new Nat464Xlat(mNai, mNetd, mDnsResolver) {
|
||||
Nat464Xlat makeNat464Xlat(boolean isCellular464XlatEnabled) {
|
||||
return new Nat464Xlat(mNai, mNetd, mDnsResolver, new ConnectivityService.Dependencies()) {
|
||||
@Override protected int getNetId() {
|
||||
return NETID;
|
||||
}
|
||||
|
||||
@Override protected boolean isCellular464XlatEnabled() {
|
||||
return isCellular464XlatEnabled;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -99,6 +108,7 @@ public class Nat464XlatTest {
|
||||
mNai.linkProperties.setInterfaceName(BASE_IFACE);
|
||||
mNai.networkInfo = new NetworkInfo(null);
|
||||
mNai.networkInfo.setType(ConnectivityManager.TYPE_WIFI);
|
||||
mNai.networkCapabilities = new NetworkCapabilities();
|
||||
markNetworkConnected();
|
||||
when(mNai.connService()).thenReturn(mConnectivity);
|
||||
when(mNai.netAgentConfig()).thenReturn(mAgentConfig);
|
||||
@@ -110,21 +120,23 @@ public class Nat464XlatTest {
|
||||
}
|
||||
|
||||
private void assertRequiresClat(boolean expected, NetworkAgentInfo nai) {
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
String msg = String.format("requiresClat expected %b for type=%d state=%s skip=%b "
|
||||
+ "nat64Prefix=%s addresses=%s", expected, nai.networkInfo.getType(),
|
||||
nai.networkInfo.getDetailedState(),
|
||||
mAgentConfig.skip464xlat, nai.linkProperties.getNat64Prefix(),
|
||||
nai.linkProperties.getLinkAddresses());
|
||||
assertEquals(msg, expected, Nat464Xlat.requiresClat(nai));
|
||||
assertEquals(msg, expected, nat.requiresClat(nai));
|
||||
}
|
||||
|
||||
private void assertShouldStartClat(boolean expected, NetworkAgentInfo nai) {
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
String msg = String.format("shouldStartClat expected %b for type=%d state=%s skip=%b "
|
||||
+ "nat64Prefix=%s addresses=%s", expected, nai.networkInfo.getType(),
|
||||
nai.networkInfo.getDetailedState(),
|
||||
mAgentConfig.skip464xlat, nai.linkProperties.getNat64Prefix(),
|
||||
nai.linkProperties.getLinkAddresses());
|
||||
assertEquals(msg, expected, Nat464Xlat.shouldStartClat(nai));
|
||||
assertEquals(msg, expected, nat.shouldStartClat(nai));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -194,7 +206,7 @@ public class Nat464XlatTest {
|
||||
}
|
||||
|
||||
private void checkNormalStartAndStop(boolean dueToDisconnect) throws Exception {
|
||||
Nat464Xlat nat = makeNat464Xlat();
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
|
||||
|
||||
mNai.linkProperties.addLinkAddress(V6ADDR);
|
||||
@@ -245,7 +257,7 @@ public class Nat464XlatTest {
|
||||
}
|
||||
|
||||
private void checkStartStopStart(boolean interfaceRemovedFirst) throws Exception {
|
||||
Nat464Xlat nat = makeNat464Xlat();
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
|
||||
InOrder inOrder = inOrder(mNetd, mConnectivity);
|
||||
|
||||
@@ -335,7 +347,7 @@ public class Nat464XlatTest {
|
||||
|
||||
@Test
|
||||
public void testClatdCrashWhileRunning() throws Exception {
|
||||
Nat464Xlat nat = makeNat464Xlat();
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
ArgumentCaptor<LinkProperties> c = ArgumentCaptor.forClass(LinkProperties.class);
|
||||
|
||||
nat.setNat64PrefixFromDns(new IpPrefix(NAT64_PREFIX));
|
||||
@@ -372,7 +384,7 @@ public class Nat464XlatTest {
|
||||
}
|
||||
|
||||
private void checkStopBeforeClatdStarts(boolean dueToDisconnect) throws Exception {
|
||||
Nat464Xlat nat = makeNat464Xlat();
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
|
||||
mNai.linkProperties.addLinkAddress(new LinkAddress("2001:db8::1/64"));
|
||||
|
||||
@@ -414,7 +426,7 @@ public class Nat464XlatTest {
|
||||
}
|
||||
|
||||
private void checkStopAndClatdNeverStarts(boolean dueToDisconnect) throws Exception {
|
||||
Nat464Xlat nat = makeNat464Xlat();
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
|
||||
mNai.linkProperties.addLinkAddress(new LinkAddress("2001:db8::1/64"));
|
||||
|
||||
@@ -450,7 +462,7 @@ public class Nat464XlatTest {
|
||||
final IpPrefix prefixFromDns = new IpPrefix(NAT64_PREFIX);
|
||||
final IpPrefix prefixFromRa = new IpPrefix(OTHER_NAT64_PREFIX);
|
||||
|
||||
Nat464Xlat nat = makeNat464Xlat();
|
||||
Nat464Xlat nat = makeNat464Xlat(true);
|
||||
|
||||
final LinkProperties emptyLp = new LinkProperties();
|
||||
LinkProperties fixedupLp;
|
||||
@@ -486,10 +498,57 @@ public class Nat464XlatTest {
|
||||
assertEquals(null, fixedupLp.getNat64Prefix());
|
||||
}
|
||||
|
||||
private void checkClatDisabledOnCellular(boolean onCellular) throws Exception {
|
||||
// Disable 464xlat on cellular networks.
|
||||
Nat464Xlat nat = makeNat464Xlat(false);
|
||||
mNai.linkProperties.addLinkAddress(V6ADDR);
|
||||
mNai.networkCapabilities.setTransportType(TRANSPORT_CELLULAR, onCellular);
|
||||
nat.update();
|
||||
|
||||
final IpPrefix nat64Prefix = new IpPrefix(NAT64_PREFIX);
|
||||
if (onCellular) {
|
||||
// Prefix discovery is never started.
|
||||
verify(mDnsResolver, never()).startPrefix64Discovery(eq(NETID));
|
||||
assertIdle(nat);
|
||||
|
||||
// If a NAT64 prefix comes in from an RA, clat is not started either.
|
||||
mNai.linkProperties.setNat64Prefix(nat64Prefix);
|
||||
nat.setNat64PrefixFromRa(nat64Prefix);
|
||||
nat.update();
|
||||
verify(mNetd, never()).clatdStart(anyString(), anyString());
|
||||
assertIdle(nat);
|
||||
} else {
|
||||
// Prefix discovery is started.
|
||||
verify(mDnsResolver).startPrefix64Discovery(eq(NETID));
|
||||
assertIdle(nat);
|
||||
|
||||
// If a NAT64 prefix comes in from an RA, clat is started.
|
||||
mNai.linkProperties.setNat64Prefix(nat64Prefix);
|
||||
nat.setNat64PrefixFromRa(nat64Prefix);
|
||||
nat.update();
|
||||
verify(mNetd).clatdStart(BASE_IFACE, NAT64_PREFIX);
|
||||
assertStarting(nat);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClatDisabledOnCellular() throws Exception {
|
||||
checkClatDisabledOnCellular(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClatDisabledOnNonCellular() throws Exception {
|
||||
checkClatDisabledOnCellular(false);
|
||||
}
|
||||
|
||||
static void assertIdle(Nat464Xlat nat) {
|
||||
assertTrue("Nat464Xlat was not IDLE", !nat.isStarted());
|
||||
}
|
||||
|
||||
static void assertStarting(Nat464Xlat nat) {
|
||||
assertTrue("Nat464Xlat was not STARTING", nat.isStarting());
|
||||
}
|
||||
|
||||
static void assertRunning(Nat464Xlat nat) {
|
||||
assertTrue("Nat464Xlat was not RUNNING", nat.isRunning());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user