diff options
2 files changed, 31 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java index 927dfd5e5919..4c950de2585e 100644 --- a/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitor.java @@ -16,6 +16,9 @@ package com.android.server.connectivity.tethering; +import static android.net.ConnectivityManager.TYPE_MOBILE_DUN; +import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI; + import android.content.Context; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; @@ -142,7 +145,11 @@ public class UpstreamNetworkMonitor { // message to aid in any subsequent debugging if (DBG) Log.d(TAG, "requesting mobile upstream network: " + mobileUpstreamRequest); - cm().requestNetwork(mobileUpstreamRequest, mMobileNetworkCallback); + // The following use of the legacy type system cannot be removed until + // after upstream selection no longer finds networks by legacy type. + // See also b/34364553. + final int apnType = mDunRequired ? TYPE_MOBILE_DUN : TYPE_MOBILE_HIPRI; + cm().requestNetwork(mobileUpstreamRequest, mMobileNetworkCallback, 0, apnType); } public void releaseMobileNetworkRequest() { diff --git a/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java index b2a9a4937b6b..00420e9e1005 100644 --- a/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java +++ b/tests/net/java/com/android/server/connectivity/tethering/UpstreamNetworkMonitorTest.java @@ -16,6 +16,8 @@ package com.android.server.connectivity.tethering; +import static android.net.ConnectivityManager.TYPE_MOBILE_DUN; +import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI; import static android.net.NetworkCapabilities.NET_CAPABILITY_DUN; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -114,6 +116,9 @@ public class UpstreamNetworkMonitorTest { mUNM.registerMobileNetworkRequest(); assertTrue(mUNM.mobileNetworkRequested()); assertEquals(1, mCM.requested.size()); + assertEquals(1, mCM.legacyTypeMap.size()); + assertEquals(Integer.valueOf(TYPE_MOBILE_HIPRI), + mCM.legacyTypeMap.values().iterator().next()); assertFalse(mCM.isDunRequested()); mUNM.stop(); @@ -137,6 +142,9 @@ public class UpstreamNetworkMonitorTest { mUNM.registerMobileNetworkRequest(); assertTrue(mUNM.mobileNetworkRequested()); assertEquals(1, mCM.requested.size()); + assertEquals(1, mCM.legacyTypeMap.size()); + assertEquals(Integer.valueOf(TYPE_MOBILE_DUN), + mCM.legacyTypeMap.values().iterator().next()); assertTrue(mCM.isDunRequested()); mUNM.stop(); @@ -148,6 +156,7 @@ public class UpstreamNetworkMonitorTest { public Set<NetworkCallback> trackingDefault = new HashSet<>(); public Map<NetworkCallback, NetworkRequest> listening = new HashMap<>(); public Map<NetworkCallback, NetworkRequest> requested = new HashMap<>(); + public Map<NetworkCallback, Integer> legacyTypeMap = new HashMap<>(); public TestConnectivityManager(Context ctx, IConnectivityManager svc) { super(ctx, svc); @@ -156,7 +165,8 @@ public class UpstreamNetworkMonitorTest { boolean isEmpty() { return trackingDefault.isEmpty() && listening.isEmpty() && - requested.isEmpty(); + requested.isEmpty() && + legacyTypeMap.isEmpty(); } boolean isListeningForDun() { @@ -184,6 +194,17 @@ public class UpstreamNetworkMonitorTest { } @Override + public void requestNetwork(NetworkRequest req, NetworkCallback cb, + int timeoutMs, int legacyType) { + assertFalse(requested.containsKey(cb)); + requested.put(cb, req); + assertFalse(legacyTypeMap.containsKey(cb)); + if (legacyType != ConnectivityManager.TYPE_NONE) { + legacyTypeMap.put(cb, legacyType); + } + } + + @Override public void registerNetworkCallback(NetworkRequest req, NetworkCallback cb) { assertFalse(listening.containsKey(cb)); listening.put(cb, req); @@ -203,6 +224,7 @@ public class UpstreamNetworkMonitorTest { listening.remove(cb); } else if (requested.containsKey(cb)) { requested.remove(cb); + legacyTypeMap.remove(cb); } assertFalse(trackingDefault.contains(cb)); |