Stop using VPNs in getActiveNetworkForUidInternal.
After this CL, ConnectivityService no longer needs to grab the
VPN lock and access Vpn objects to determine connectivity state.
Also make a synchronized (mVpns) block smaller.
Bug: 173331190
Test: existing tests in ConnectivityServiceTest
Change-Id: I3297b3ab8e75bdf4902c62dd7e492c3634cfc51f
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 69f2457..d8dc933 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -28,7 +28,6 @@
import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS;
import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_PACKET_FAIL_RATE;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
-import static android.net.ConnectivityManager.NETID_UNSET;
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_NONE;
@@ -1444,31 +1443,20 @@
}
private Network getActiveNetworkForUidInternal(final int uid, boolean ignoreBlocked) {
- final int user = UserHandle.getUserId(uid);
- int vpnNetId = NETID_UNSET;
- synchronized (mVpns) {
- final Vpn vpn = mVpns.get(user);
- // TODO : now that capabilities contain the UID, the appliesToUid test should
- // be removed as the satisfying test below should be enough.
- if (vpn != null && vpn.appliesToUid(uid)) vpnNetId = vpn.getNetId();
- }
- NetworkAgentInfo nai;
- if (vpnNetId != NETID_UNSET) {
- nai = getNetworkAgentInfoForNetId(vpnNetId);
- if (nai != null) {
- final NetworkCapabilities requiredCaps =
- createDefaultNetworkCapabilitiesForUid(uid);
- if (requiredCaps.satisfiedByNetworkCapabilities(nai.networkCapabilities)) {
- return nai.network;
- }
+ final NetworkAgentInfo vpnNai = getVpnForUid(uid);
+ if (vpnNai != null) {
+ final NetworkCapabilities requiredCaps = createDefaultNetworkCapabilitiesForUid(uid);
+ if (requiredCaps.satisfiedByNetworkCapabilities(vpnNai.networkCapabilities)) {
+ return vpnNai.network;
}
}
- nai = getDefaultNetwork();
- if (nai != null && isNetworkWithCapabilitiesBlocked(
- nai.networkCapabilities, uid, ignoreBlocked)) {
- nai = null;
+
+ NetworkAgentInfo nai = getDefaultNetwork();
+ if (nai == null || isNetworkWithCapabilitiesBlocked(nai.networkCapabilities, uid,
+ ignoreBlocked)) {
+ return null;
}
- return nai != null ? nai.network : null;
+ return nai.network;
}
// Public because it's used by mLockdownTracker.
@@ -4814,15 +4802,15 @@
if (mLockdownEnabled) {
return new VpnInfo[0];
}
- List<VpnInfo> infoList = new ArrayList<>();
- for (NetworkAgentInfo nai : mNetworkAgentInfos) {
- VpnInfo info = createVpnInfo(nai);
- if (info != null) {
- infoList.add(info);
- }
- }
- return infoList.toArray(new VpnInfo[infoList.size()]);
}
+ List<VpnInfo> infoList = new ArrayList<>();
+ for (NetworkAgentInfo nai : mNetworkAgentInfos) {
+ VpnInfo info = createVpnInfo(nai);
+ if (info != null) {
+ infoList.add(info);
+ }
+ }
+ return infoList.toArray(new VpnInfo[infoList.size()]);
}
/**