Merge "Switch from networkCreate[Physical/Vpn] to networkCreate" am: c9d5cd9fbc
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1669648 Change-Id: Ia7b8d56ee75194cfe289dbb3e73667f43344cda3
This commit is contained in:
@@ -58,6 +58,7 @@ import java.util.List;
|
|||||||
* @see Ikev2VpnProfile
|
* @see Ikev2VpnProfile
|
||||||
*/
|
*/
|
||||||
public class VpnManager {
|
public class VpnManager {
|
||||||
|
// TODO: add a unit test to ensure that TYPE_VPN_xxx matches android.net.NativeVpnType.
|
||||||
/** Type representing a lack of VPN @hide */
|
/** Type representing a lack of VPN @hide */
|
||||||
@SystemApi(client = MODULE_LIBRARIES)
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
public static final int TYPE_VPN_NONE = -1;
|
public static final int TYPE_VPN_NONE = -1;
|
||||||
|
|||||||
@@ -133,6 +133,8 @@ import android.net.IpMemoryStore;
|
|||||||
import android.net.IpPrefix;
|
import android.net.IpPrefix;
|
||||||
import android.net.LinkProperties;
|
import android.net.LinkProperties;
|
||||||
import android.net.MatchAllNetworkSpecifier;
|
import android.net.MatchAllNetworkSpecifier;
|
||||||
|
import android.net.NativeNetworkConfig;
|
||||||
|
import android.net.NativeNetworkType;
|
||||||
import android.net.NattSocketKeepalive;
|
import android.net.NattSocketKeepalive;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkAgent;
|
import android.net.NetworkAgent;
|
||||||
@@ -3804,36 +3806,43 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
nai.onNetworkDestroyed();
|
nai.onNetworkDestroyed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean createNativeNetwork(@NonNull NetworkAgentInfo networkAgent) {
|
private boolean createNativeNetwork(@NonNull NetworkAgentInfo nai) {
|
||||||
try {
|
try {
|
||||||
// This should never fail. Specifying an already in use NetID will cause failure.
|
// This should never fail. Specifying an already in use NetID will cause failure.
|
||||||
if (networkAgent.isVPN()) {
|
final NativeNetworkConfig config;
|
||||||
mNetd.networkCreateVpn(networkAgent.network.getNetId(),
|
if (nai.isVPN()) {
|
||||||
(networkAgent.networkAgentConfig == null
|
if (getVpnType(nai) == VpnManager.TYPE_VPN_NONE) {
|
||||||
|| !networkAgent.networkAgentConfig.allowBypass));
|
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 {
|
} else {
|
||||||
mNetd.networkCreatePhysical(networkAgent.network.getNetId(),
|
config = new NativeNetworkConfig(nai.network.getNetId(), NativeNetworkType.PHYSICAL,
|
||||||
getNetworkPermission(networkAgent.networkCapabilities));
|
getNetworkPermission(nai.networkCapabilities), /*secure=*/ false,
|
||||||
|
VpnManager.TYPE_VPN_NONE);
|
||||||
}
|
}
|
||||||
mDnsResolver.createNetworkCache(networkAgent.network.getNetId());
|
mNetd.networkCreate(config);
|
||||||
mDnsManager.updateTransportsForNetwork(networkAgent.network.getNetId(),
|
mDnsResolver.createNetworkCache(nai.network.getNetId());
|
||||||
networkAgent.networkCapabilities.getTransportTypes());
|
mDnsManager.updateTransportsForNetwork(nai.network.getNetId(),
|
||||||
|
nai.networkCapabilities.getTransportTypes());
|
||||||
return true;
|
return true;
|
||||||
} catch (RemoteException | ServiceSpecificException e) {
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
loge("Error creating network " + networkAgent.network.getNetId() + ": "
|
loge("Error creating network " + nai.network.getNetId() + ": " + e.getMessage());
|
||||||
+ e.getMessage());
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void destroyNativeNetwork(@NonNull NetworkAgentInfo networkAgent) {
|
private void destroyNativeNetwork(@NonNull NetworkAgentInfo nai) {
|
||||||
try {
|
try {
|
||||||
mNetd.networkDestroy(networkAgent.network.getNetId());
|
mNetd.networkDestroy(nai.network.getNetId());
|
||||||
} catch (RemoteException | ServiceSpecificException e) {
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
loge("Exception destroying network(networkDestroy): " + e);
|
loge("Exception destroying network(networkDestroy): " + e);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
mDnsResolver.destroyNetworkCache(networkAgent.network.getNetId());
|
mDnsResolver.destroyNetworkCache(nai.network.getNetId());
|
||||||
} catch (RemoteException | ServiceSpecificException e) {
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
loge("Exception destroying network: " + e);
|
loge("Exception destroying network: " + e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -370,4 +370,8 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isBypassableVpn() {
|
||||||
|
return mNetworkAgentConfig.isBypassableVpn();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,6 +211,8 @@ import android.net.IpSecManager.UdpEncapsulationSocket;
|
|||||||
import android.net.LinkAddress;
|
import android.net.LinkAddress;
|
||||||
import android.net.LinkProperties;
|
import android.net.LinkProperties;
|
||||||
import android.net.MatchAllNetworkSpecifier;
|
import android.net.MatchAllNetworkSpecifier;
|
||||||
|
import android.net.NativeNetworkConfig;
|
||||||
|
import android.net.NativeNetworkType;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
import android.net.NetworkAgent;
|
import android.net.NetworkAgent;
|
||||||
import android.net.NetworkAgentConfig;
|
import android.net.NetworkAgentConfig;
|
||||||
@@ -1253,6 +1255,8 @@ public class ConnectivityServiceTest {
|
|||||||
verify(mMockNetd, never())
|
verify(mMockNetd, never())
|
||||||
.networkRemoveUidRanges(eq(mMockVpn.getNetwork().getNetId()), any());
|
.networkRemoveUidRanges(eq(mMockVpn.getNetwork().getNetId()), any());
|
||||||
mAgentRegistered = true;
|
mAgentRegistered = true;
|
||||||
|
verify(mMockNetd).networkCreate(nativeNetworkConfigVpn(getNetwork().netId,
|
||||||
|
!mMockNetworkAgent.isBypassableVpn(), mVpnType));
|
||||||
updateState(NetworkInfo.DetailedState.CONNECTED, "registerAgent");
|
updateState(NetworkInfo.DetailedState.CONNECTED, "registerAgent");
|
||||||
mNetworkCapabilities.set(mMockNetworkAgent.getNetworkCapabilities());
|
mNetworkCapabilities.set(mMockNetworkAgent.getNetworkCapabilities());
|
||||||
mNetworkAgent = mMockNetworkAgent.getNetworkAgent();
|
mNetworkAgent = mMockNetworkAgent.getNetworkAgent();
|
||||||
@@ -2861,6 +2865,16 @@ public class ConnectivityServiceTest {
|
|||||||
mCm.unregisterNetworkCallback(callback);
|
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
|
@Test
|
||||||
public void testNetworkAgentCallbacks() throws Exception {
|
public void testNetworkAgentCallbacks() throws Exception {
|
||||||
// Keeps track of the order of events that happen in this test.
|
// Keeps track of the order of events that happen in this test.
|
||||||
@@ -2882,8 +2896,8 @@ public class ConnectivityServiceTest {
|
|||||||
wifiNetwork.set(mWiFiNetworkAgent.getNetwork());
|
wifiNetwork.set(mWiFiNetworkAgent.getNetwork());
|
||||||
assertNotNull(wifiNetwork.get());
|
assertNotNull(wifiNetwork.get());
|
||||||
try {
|
try {
|
||||||
verify(mMockNetd).networkCreatePhysical(wifiNetwork.get().getNetId(),
|
verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_NONE);
|
wifiNetwork.get().getNetId(), INetd.PERMISSION_NONE));
|
||||||
} catch (RemoteException impossible) {
|
} catch (RemoteException impossible) {
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
@@ -8327,7 +8341,8 @@ public class ConnectivityServiceTest {
|
|||||||
final int cellNetId = mCellNetworkAgent.getNetwork().netId;
|
final int cellNetId = mCellNetworkAgent.getNetwork().netId;
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
|
|
||||||
verify(mMockNetd, times(1)).networkCreatePhysical(eq(cellNetId), anyInt());
|
verify(mMockNetd, times(1)).networkCreate(nativeNetworkConfigPhysical(cellNetId,
|
||||||
|
INetd.PERMISSION_NONE));
|
||||||
assertRoutesAdded(cellNetId, ipv6Subnet, defaultRoute);
|
assertRoutesAdded(cellNetId, ipv6Subnet, defaultRoute);
|
||||||
verify(mMockDnsResolver, times(1)).createNetworkCache(eq(cellNetId));
|
verify(mMockDnsResolver, times(1)).createNetworkCache(eq(cellNetId));
|
||||||
verify(mMockNetd, times(1)).networkAddInterface(cellNetId, MOBILE_IFNAME);
|
verify(mMockNetd, times(1)).networkAddInterface(cellNetId, MOBILE_IFNAME);
|
||||||
@@ -11982,8 +11997,9 @@ public class ConnectivityServiceTest {
|
|||||||
mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
mProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
mProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_NONE);
|
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||||
|
|
||||||
|
|
||||||
final TestOnCompleteListener listener = new TestOnCompleteListener();
|
final TestOnCompleteListener listener = new TestOnCompleteListener();
|
||||||
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||||
@@ -12010,8 +12026,8 @@ public class ConnectivityServiceTest {
|
|||||||
mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent);
|
mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent);
|
||||||
mSystemDefaultNetworkCallback.assertNoCallback();
|
mSystemDefaultNetworkCallback.assertNoCallback();
|
||||||
mDefaultNetworkCallback.assertNoCallback();
|
mDefaultNetworkCallback.assertNoCallback();
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(workAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(
|
||||||
INetd.PERMISSION_SYSTEM);
|
nativeNetworkConfigPhysical(workAgent.getNetwork().netId, INetd.PERMISSION_SYSTEM));
|
||||||
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent.getNetwork().netId,
|
||||||
uidRangeFor(testHandle));
|
uidRangeFor(testHandle));
|
||||||
inOrder.verify(mMockNetd).networkRemoveUidRanges(mCellNetworkAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkRemoveUidRanges(mCellNetworkAgent.getNetwork().netId,
|
||||||
@@ -12054,8 +12070,8 @@ public class ConnectivityServiceTest {
|
|||||||
mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
mSystemDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
mProfileDefaultNetworkCallback.assertNoCallback();
|
mProfileDefaultNetworkCallback.assertNoCallback();
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_NONE);
|
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||||
|
|
||||||
// When the agent disconnects, test that the app on the work profile falls back to the
|
// When the agent disconnects, test that the app on the work profile falls back to the
|
||||||
// default network.
|
// default network.
|
||||||
@@ -12085,8 +12101,8 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent2);
|
mProfileDefaultNetworkCallback.expectAvailableCallbacksUnvalidated(workAgent2);
|
||||||
assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback);
|
assertNoCallbacks(mSystemDefaultNetworkCallback, mDefaultNetworkCallback);
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(workAgent2.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_SYSTEM);
|
workAgent2.getNetwork().netId, INetd.PERMISSION_SYSTEM));
|
||||||
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent2.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent2.getNetwork().netId,
|
||||||
uidRangeFor(testHandle));
|
uidRangeFor(testHandle));
|
||||||
|
|
||||||
@@ -12131,8 +12147,8 @@ public class ConnectivityServiceTest {
|
|||||||
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||||
r -> r.run(), listener);
|
r -> r.run(), listener);
|
||||||
listener.expectOnComplete();
|
listener.expectOnComplete();
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_NONE);
|
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||||
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkAddUidRanges(workAgent.getNetwork().netId,
|
||||||
uidRangeFor(testHandle));
|
uidRangeFor(testHandle));
|
||||||
|
|
||||||
@@ -12184,10 +12200,10 @@ public class ConnectivityServiceTest {
|
|||||||
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
mDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
mProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
mProfileDefaultNetworkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
app4Cb.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
app4Cb.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_NONE);
|
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(workAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_SYSTEM);
|
workAgent.getNetwork().netId, INetd.PERMISSION_SYSTEM));
|
||||||
|
|
||||||
final TestOnCompleteListener listener = new TestOnCompleteListener();
|
final TestOnCompleteListener listener = new TestOnCompleteListener();
|
||||||
mCm.setProfileNetworkPreference(testHandle2, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
mCm.setProfileNetworkPreference(testHandle2, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||||
@@ -12239,8 +12255,8 @@ public class ConnectivityServiceTest {
|
|||||||
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
mCm.setProfileNetworkPreference(testHandle, PROFILE_NETWORK_PREFERENCE_ENTERPRISE,
|
||||||
r -> r.run(), listener);
|
r -> r.run(), listener);
|
||||||
listener.expectOnComplete();
|
listener.expectOnComplete();
|
||||||
inOrder.verify(mMockNetd).networkCreatePhysical(mCellNetworkAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkCreate(nativeNetworkConfigPhysical(
|
||||||
INetd.PERMISSION_NONE);
|
mCellNetworkAgent.getNetwork().netId, INetd.PERMISSION_NONE));
|
||||||
inOrder.verify(mMockNetd).networkAddUidRanges(mCellNetworkAgent.getNetwork().netId,
|
inOrder.verify(mMockNetd).networkAddUidRanges(mCellNetworkAgent.getNetwork().netId,
|
||||||
uidRangeFor(testHandle));
|
uidRangeFor(testHandle));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user