Merge "Set VPN as the preference network for specific apps" am: 593b84759f am: e2659b3350

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

Change-Id: I9f87a6a4ee1019a57d191dd7be3d35983b7e388a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Lucas Lin
2022-12-21 02:43:02 +00:00
committed by Automerger Merge Worker

View File

@@ -140,6 +140,7 @@ import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;
import com.android.internal.net.VpnProfile;
import com.android.modules.utils.build.SdkLevel;
import com.android.net.module.util.BinderUtils;
import com.android.net.module.util.NetdUtils;
import com.android.net.module.util.NetworkStackConstants;
import com.android.server.DeviceIdleInternal;
@@ -2783,6 +2784,16 @@ public class Vpn {
return hasIPV6 && !hasIPV4;
}
private void setVpnNetworkPreference(String session, Set<Range<Integer>> ranges) {
BinderUtils.withCleanCallingIdentity(
() -> mConnectivityManager.setVpnDefaultForUids(session, ranges));
}
private void clearVpnNetworkPreference(String session) {
BinderUtils.withCleanCallingIdentity(
() -> mConnectivityManager.setVpnDefaultForUids(session, Collections.EMPTY_LIST));
}
/**
* Internal class managing IKEv2/IPsec VPN connectivity
*
@@ -2894,6 +2905,9 @@ public class Vpn {
(r, exe) -> {
Log.d(TAG, "Runnable " + r + " rejected by the mExecutor");
});
setVpnNetworkPreference(mSessionKey,
createUserAndRestrictedProfilesRanges(mUserId,
mConfig.allowedApplications, mConfig.disallowedApplications));
}
@Override
@@ -3047,7 +3061,6 @@ public class Vpn {
mConfig.dnsServers.addAll(dnsAddrStrings);
mConfig.underlyingNetworks = new Network[] {network};
mConfig.disallowedApplications = getAppExclusionList(mPackage);
networkAgent = mNetworkAgent;
@@ -3750,6 +3763,7 @@ public class Vpn {
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
mConnectivityDiagnosticsManager.unregisterConnectivityDiagnosticsCallback(
mDiagnosticsCallback);
clearVpnNetworkPreference(mSessionKey);
mExecutor.shutdown();
}
@@ -4310,6 +4324,7 @@ public class Vpn {
mConfig.requiresInternetValidation = profile.requiresInternetValidation;
mConfig.excludeLocalRoutes = profile.excludeLocalRoutes;
mConfig.allowBypass = profile.isBypassable;
mConfig.disallowedApplications = getAppExclusionList(mPackage);
switch (profile.type) {
case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS:
@@ -4462,6 +4477,9 @@ public class Vpn {
.setUids(createUserAndRestrictedProfilesRanges(
mUserId, null /* allowedApplications */, excludedApps))
.build();
setVpnNetworkPreference(getSessionKeyLocked(),
createUserAndRestrictedProfilesRanges(mUserId,
mConfig.allowedApplications, mConfig.disallowedApplications));
doSendNetworkCapabilities(mNetworkAgent, mNetworkCapabilities);
}
}