Merge "Switch from networkCreate[Physical/Vpn] to networkCreate" am: a0b65e1870 am: aa243fe3ba am: 05f062fb64
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1669648 Change-Id: I3475e674c3914c4c61fd0a4246c9ee3e7e02c4fb
This commit is contained in:
@@ -133,6 +133,8 @@ import android.net.IpMemoryStore;
|
||||
import android.net.IpPrefix;
|
||||
import android.net.LinkProperties;
|
||||
import android.net.MatchAllNetworkSpecifier;
|
||||
import android.net.NativeNetworkConfig;
|
||||
import android.net.NativeNetworkType;
|
||||
import android.net.NattSocketKeepalive;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkAgent;
|
||||
@@ -3821,36 +3823,43 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
nai.onNetworkDestroyed();
|
||||
}
|
||||
|
||||
private boolean createNativeNetwork(@NonNull NetworkAgentInfo networkAgent) {
|
||||
private boolean createNativeNetwork(@NonNull NetworkAgentInfo nai) {
|
||||
try {
|
||||
// This should never fail. Specifying an already in use NetID will cause failure.
|
||||
if (networkAgent.isVPN()) {
|
||||
mNetd.networkCreateVpn(networkAgent.network.getNetId(),
|
||||
(networkAgent.networkAgentConfig == null
|
||||
|| !networkAgent.networkAgentConfig.allowBypass));
|
||||
final NativeNetworkConfig config;
|
||||
if (nai.isVPN()) {
|
||||
if (getVpnType(nai) == VpnManager.TYPE_VPN_NONE) {
|
||||
Log.wtf(TAG, "Unable to get VPN type from network " + nai.network.getNetId());
|
||||
return false;
|
||||
}
|
||||
config = new NativeNetworkConfig(nai.network.getNetId(), NativeNetworkType.VIRTUAL,
|
||||
INetd.PERMISSION_NONE,
|
||||
(nai.networkAgentConfig == null || !nai.networkAgentConfig.allowBypass),
|
||||
getVpnType(nai));
|
||||
} else {
|
||||
mNetd.networkCreatePhysical(networkAgent.network.getNetId(),
|
||||
getNetworkPermission(networkAgent.networkCapabilities));
|
||||
config = new NativeNetworkConfig(nai.network.getNetId(), NativeNetworkType.PHYSICAL,
|
||||
getNetworkPermission(nai.networkCapabilities), /*secure=*/ false,
|
||||
VpnManager.TYPE_VPN_NONE);
|
||||
}
|
||||
mDnsResolver.createNetworkCache(networkAgent.network.getNetId());
|
||||
mDnsManager.updateTransportsForNetwork(networkAgent.network.getNetId(),
|
||||
networkAgent.networkCapabilities.getTransportTypes());
|
||||
mNetd.networkCreate(config);
|
||||
mDnsResolver.createNetworkCache(nai.network.getNetId());
|
||||
mDnsManager.updateTransportsForNetwork(nai.network.getNetId(),
|
||||
nai.networkCapabilities.getTransportTypes());
|
||||
return true;
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
loge("Error creating network " + networkAgent.network.getNetId() + ": "
|
||||
+ e.getMessage());
|
||||
loge("Error creating network " + nai.network.getNetId() + ": " + e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void destroyNativeNetwork(@NonNull NetworkAgentInfo networkAgent) {
|
||||
private void destroyNativeNetwork(@NonNull NetworkAgentInfo nai) {
|
||||
try {
|
||||
mNetd.networkDestroy(networkAgent.network.getNetId());
|
||||
mNetd.networkDestroy(nai.network.getNetId());
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
loge("Exception destroying network(networkDestroy): " + e);
|
||||
}
|
||||
try {
|
||||
mDnsResolver.destroyNetworkCache(networkAgent.network.getNetId());
|
||||
mDnsResolver.destroyNetworkCache(nai.network.getNetId());
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
loge("Exception destroying network: " + e);
|
||||
}
|
||||
|
||||
@@ -381,4 +381,8 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isBypassableVpn() {
|
||||
return mNetworkAgentConfig.isBypassableVpn();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,6 +213,8 @@ import android.net.IpSecManager.UdpEncapsulationSocket;
|
||||
import android.net.LinkAddress;
|
||||
import android.net.LinkProperties;
|
||||
import android.net.MatchAllNetworkSpecifier;
|
||||
import android.net.NativeNetworkConfig;
|
||||
import android.net.NativeNetworkType;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkAgent;
|
||||
import android.net.NetworkAgentConfig;
|
||||
@@ -1241,6 +1243,8 @@ public class ConnectivityServiceTest {
|
||||
verify(mMockNetd, never())
|
||||
.networkRemoveUidRanges(eq(mMockVpn.getNetwork().getNetId()), any());
|
||||
mAgentRegistered = true;
|
||||
verify(mMockNetd).networkCreate(nativeNetworkConfigVpn(getNetwork().netId,
|
||||
!mMockNetworkAgent.isBypassableVpn(), mVpnType));
|
||||
updateState(NetworkInfo.DetailedState.CONNECTED, "registerAgent");
|
||||
mNetworkCapabilities.set(mMockNetworkAgent.getNetworkCapabilities());
|
||||
mNetworkAgent = mMockNetworkAgent.getNetworkAgent();
|
||||
@@ -2830,6 +2834,16 @@ public class ConnectivityServiceTest {
|
||||
mCm.unregisterNetworkCallback(callback);
|
||||
}
|
||||
|
||||
private NativeNetworkConfig nativeNetworkConfigPhysical(int netId, int permission) {
|
||||
return new NativeNetworkConfig(netId, NativeNetworkType.PHYSICAL, permission,
|
||||
/*secure=*/ false, VpnManager.TYPE_VPN_NONE);
|
||||
}
|
||||
|
||||
private NativeNetworkConfig nativeNetworkConfigVpn(int netId, boolean secure, int vpnType) {
|
||||
return new NativeNetworkConfig(netId, NativeNetworkType.VIRTUAL, INetd.PERMISSION_NONE,
|
||||
secure, vpnType);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNetworkAgentCallbacks() throws Exception {
|
||||
// Keeps track of the order of events that happen in this test.
|
||||
@@ -2851,8 +2865,8 @@ public class ConnectivityServiceTest {
|
||||
wifiNetwork.set(mWiFiNetworkAgent.getNetwork());
|
||||
assertNotNull(wifiNetwork.get());
|
||||
try {
|
||||
verify(mMockNetd).networkCreatePhysical(wifiNetwork.get().getNetId(),
|
||||
INetd.PERMISSION_NONE);
|
||||
verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
wifiNetwork.get().getNetId(), INetd.PERMISSION_NONE));
|
||||
} catch (RemoteException impossible) {
|
||||
fail();
|
||||
}
|
||||
@@ -8406,7 +8420,8 @@ public class ConnectivityServiceTest {
|
||||
final int cellNetId = mCellNetworkAgent.getNetwork().netId;
|
||||
waitForIdle();
|
||||
|
||||
verify(mMockNetd, times(1)).networkCreatePhysical(eq(cellNetId), anyInt());
|
||||
verify(mMockNetd, times(1)).networkCreate(nativeNetworkConfigPhysical(cellNetId,
|
||||
INetd.PERMISSION_NONE));
|
||||
assertRoutesAdded(cellNetId, ipv6Subnet, defaultRoute);
|
||||
verify(mMockDnsResolver, times(1)).createNetworkCache(eq(cellNetId));
|
||||
verify(mMockNetd, times(1)).networkAddInterface(cellNetId, MOBILE_IFNAME);
|
||||
@@ -12313,8 +12328,9 @@ public class ConnectivityServiceTest {
|
||||
mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
mProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
||||
INetd.PERMISSION_NONE);
|
||||
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||
|
||||
|
||||
final TestOnCompleteListener listener = new TestOnCompleteListener();
|
||||
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||
@@ -12341,8 +12357,8 @@ public class ConnectivityServiceTest {
|
||||
mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent);
|
||||
mSystemDefaultNetworkCallback.assertNoCallback();
|
||||
mDefaultNetworkCallback.assertNoCallback();
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(workAgent.getNetwork().netId,
|
||||
INetd.PERMISSION_SYSTEM);
|
||||
inOrder.verify(mMockNetd).networkCreate(
|
||||
nativeNetworkConfigPhysical(workAgent.getNetwork().netId, INetd.PERMISSION_SYSTEM));
|
||||
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent.getNetwork().netId,
|
||||
uidRangeFor(testHandle));
|
||||
inOrder.verify(mMockNetd).networkRemoveUidRanges(mCellNetworkAgent.getNetwork().netId,
|
||||
@@ -12385,8 +12401,8 @@ public class ConnectivityServiceTest {
|
||||
mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
mProfileDefaultNetworkCallback.assertNoCallback();
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
||||
INetd.PERMISSION_NONE);
|
||||
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||
|
||||
// When the agent disconnects, test that the app on the work profile falls back to the
|
||||
// default network.
|
||||
@@ -12416,8 +12432,8 @@ public class ConnectivityServiceTest {
|
||||
|
||||
mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent2);
|
||||
assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback);
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(workAgent2.getNetwork().netId,
|
||||
INetd.PERMISSION_SYSTEM);
|
||||
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
workAgent2.getNetwork().netId, INetd.PERMISSION_SYSTEM));
|
||||
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent2.getNetwork().netId,
|
||||
uidRangeFor(testHandle));
|
||||
|
||||
@@ -12462,8 +12478,8 @@ public class ConnectivityServiceTest {
|
||||
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||
r -> r.run(), listener);
|
||||
listener.expectOnComplete();
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
||||
INetd.PERMISSION_NONE);
|
||||
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent.getNetwork().netId,
|
||||
uidRangeFor(testHandle));
|
||||
|
||||
@@ -12515,10 +12531,10 @@ public class ConnectivityServiceTest {
|
||||
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
mProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
app4Cb.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
||||
INetd.PERMISSION_NONE);
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(workAgent.getNetwork().netId,
|
||||
INetd.PERMISSION_SYSTEM);
|
||||
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
workAgent.getNetwork().netId, INetd.PERMISSION_SYSTEM));
|
||||
|
||||
final TestOnCompleteListener listener = new TestOnCompleteListener();
|
||||
mCm.setProfileNetworkPreference(testHandle2, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||
@@ -12570,8 +12586,8 @@ public class ConnectivityServiceTest {
|
||||
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||
r -> r.run(), listener);
|
||||
listener.expectOnComplete();
|
||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
||||
INetd.PERMISSION_NONE);
|
||||
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||
inOrder.verify(mMockNetd).networkAddUidRanges(mCellNetworkAgent.getNetwork().netId,
|
||||
uidRangeFor(testHandle));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user