Merge "Add DEFAULT_NETWORK_PRIORITY constants" into sc-dev

This commit is contained in:
Paul Hu
2021-06-14 15:17:23 +00:00
committed by Android (Google) Code Review
2 changed files with 81 additions and 21 deletions

View File

@@ -398,6 +398,32 @@ public class ConnectivityService extends IConnectivityManager.Stub
TEARDOWN, // Determine whether this network is unneeded and should be torn down. TEARDOWN, // Determine whether this network is unneeded and should be torn down.
} }
/**
* The priority value is used when issue uid ranges rules to netd. Netd will use the priority
* value and uid ranges to generate corresponding ip rules specific to the given preference.
* Thus, any device originated data traffic of the applied uids can be routed to the altered
* default network which has highest priority.
*
* Note: The priority value should be in 0~1000. Larger value means lower priority, see
* {@link NativeUidRangeConfig}.
*/
// This is default priority value for those NetworkRequests which doesn't have preference to
// alter default network and use the global one.
@VisibleForTesting
static final int DEFAULT_NETWORK_PRIORITY_NONE = 0;
// Used by automotive devices to set the network preferences used to direct traffic at an
// application level. See {@link #setOemNetworkPreference}.
@VisibleForTesting
static final int DEFAULT_NETWORK_PRIORITY_OEM = 10;
// Request that a user profile is put by default on a network matching a given preference.
// See {@link #setProfileNetworkPreference}.
@VisibleForTesting
static final int DEFAULT_NETWORK_PRIORITY_PROFILE = 20;
// Set by MOBILE_DATA_PREFERRED_UIDS setting. Use mobile data in preference even when
// higher-priority networks are connected.
@VisibleForTesting
static final int DEFAULT_NETWORK_PRIORITY_MOBILE_DATA_PREFERRED = 30;
/** /**
* used internally to clear a wakelock when transitioning * used internally to clear a wakelock when transitioning
* from one net to another. Clear happens when we get a new * from one net to another. Clear happens when we get a new
@@ -4154,8 +4180,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
final NetworkAgentInfo satisfier = nri.getSatisfier(); final NetworkAgentInfo satisfier = nri.getSatisfier();
if (null != satisfier) { if (null != satisfier) {
try { try {
// TODO: Passing default network priority to netd.
mNetd.networkRemoveUidRanges(satisfier.network.getNetId(), mNetd.networkRemoveUidRanges(satisfier.network.getNetId(),
toUidRangeStableParcels(nri.getUids())); toUidRangeStableParcels(nri.getUids())
/* nri.getDefaultNetworkPriority() */);
} catch (RemoteException e) { } catch (RemoteException e) {
loge("Exception setting network preference default network", e); loge("Exception setting network preference default network", e);
} }
@@ -5600,6 +5628,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
// maximum limit of registered callbacks per UID. // maximum limit of registered callbacks per UID.
final int mAsUid; final int mAsUid;
// Default network priority of this request.
private final int mDefaultNetworkPriority;
int getDefaultNetworkPriority() {
return mDefaultNetworkPriority;
}
// In order to preserve the mapping of NetworkRequest-to-callback when apps register // In order to preserve the mapping of NetworkRequest-to-callback when apps register
// callbacks using a returned NetworkRequest, the original NetworkRequest needs to be // callbacks using a returned NetworkRequest, the original NetworkRequest needs to be
// maintained for keying off of. This is only a concern when the original nri // maintained for keying off of. This is only a concern when the original nri
@@ -5629,12 +5664,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
NetworkRequestInfo(int asUid, @NonNull final NetworkRequest r, NetworkRequestInfo(int asUid, @NonNull final NetworkRequest r,
@Nullable final PendingIntent pi, @Nullable String callingAttributionTag) { @Nullable final PendingIntent pi, @Nullable String callingAttributionTag) {
this(asUid, Collections.singletonList(r), r, pi, callingAttributionTag); this(asUid, Collections.singletonList(r), r, pi, callingAttributionTag,
DEFAULT_NETWORK_PRIORITY_NONE);
} }
NetworkRequestInfo(int asUid, @NonNull final List<NetworkRequest> r, NetworkRequestInfo(int asUid, @NonNull final List<NetworkRequest> r,
@NonNull final NetworkRequest requestForCallback, @Nullable final PendingIntent pi, @NonNull final NetworkRequest requestForCallback, @Nullable final PendingIntent pi,
@Nullable String callingAttributionTag) { @Nullable String callingAttributionTag, final int defaultNetworkPriority) {
ensureAllNetworkRequestsHaveType(r); ensureAllNetworkRequestsHaveType(r);
mRequests = initializeRequests(r); mRequests = initializeRequests(r);
mNetworkRequestForCallback = requestForCallback; mNetworkRequestForCallback = requestForCallback;
@@ -5652,6 +5688,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/ */
mCallbackFlags = NetworkCallback.FLAG_NONE; mCallbackFlags = NetworkCallback.FLAG_NONE;
mCallingAttributionTag = callingAttributionTag; mCallingAttributionTag = callingAttributionTag;
mDefaultNetworkPriority = defaultNetworkPriority;
} }
NetworkRequestInfo(int asUid, @NonNull final NetworkRequest r, @Nullable final Messenger m, NetworkRequestInfo(int asUid, @NonNull final NetworkRequest r, @Nullable final Messenger m,
@@ -5681,6 +5718,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
mPerUidCounter.incrementCountOrThrow(mUid); mPerUidCounter.incrementCountOrThrow(mUid);
mCallbackFlags = callbackFlags; mCallbackFlags = callbackFlags;
mCallingAttributionTag = callingAttributionTag; mCallingAttributionTag = callingAttributionTag;
mDefaultNetworkPriority = DEFAULT_NETWORK_PRIORITY_NONE;
linkDeathRecipient(); linkDeathRecipient();
} }
@@ -5720,15 +5758,18 @@ public class ConnectivityService extends IConnectivityManager.Stub
mPerUidCounter.incrementCountOrThrow(mUid); mPerUidCounter.incrementCountOrThrow(mUid);
mCallbackFlags = nri.mCallbackFlags; mCallbackFlags = nri.mCallbackFlags;
mCallingAttributionTag = nri.mCallingAttributionTag; mCallingAttributionTag = nri.mCallingAttributionTag;
mDefaultNetworkPriority = DEFAULT_NETWORK_PRIORITY_NONE;
linkDeathRecipient(); linkDeathRecipient();
} }
NetworkRequestInfo(int asUid, @NonNull final NetworkRequest r) { NetworkRequestInfo(int asUid, @NonNull final NetworkRequest r) {
this(asUid, Collections.singletonList(r)); this(asUid, Collections.singletonList(r), DEFAULT_NETWORK_PRIORITY_NONE);
} }
NetworkRequestInfo(int asUid, @NonNull final List<NetworkRequest> r) { NetworkRequestInfo(int asUid, @NonNull final List<NetworkRequest> r,
this(asUid, r, r.get(0), null /* pi */, null /* callingAttributionTag */); final int defaultNetworkPriority) {
this(asUid, r, r.get(0), null /* pi */, null /* callingAttributionTag */,
defaultNetworkPriority);
} }
// True if this NRI is being satisfied. It also accounts for if the nri has its satisifer // True if this NRI is being satisfied. It also accounts for if the nri has its satisifer
@@ -7376,9 +7417,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
maybeCloseSockets(nai, ranges, exemptUids); maybeCloseSockets(nai, ranges, exemptUids);
try { try {
if (add) { if (add) {
mNetd.networkAddUidRanges(nai.network.netId, ranges); // TODO: Passing default network priority to netd.
mNetd.networkAddUidRanges(nai.network.netId, ranges
/* DEFAULT_NETWORK_PRIORITY_NONE */);
} else { } else {
mNetd.networkRemoveUidRanges(nai.network.netId, ranges); // TODO: Passing default network priority to netd.
mNetd.networkRemoveUidRanges(nai.network.netId, ranges
/* DEFAULT_NETWORK_PRIORITY_NONE */);
} }
} catch (Exception e) { } catch (Exception e) {
loge("Exception while " + (add ? "adding" : "removing") + " uid ranges " + uidRanges + loge("Exception while " + (add ? "adding" : "removing") + " uid ranges " + uidRanges +
@@ -7689,14 +7734,18 @@ public class ConnectivityService extends IConnectivityManager.Stub
+ " any applications to set as the default." + nri); + " any applications to set as the default." + nri);
} }
if (null != newDefaultNetwork) { if (null != newDefaultNetwork) {
// TODO: Passing default network priority to netd.
mNetd.networkAddUidRanges( mNetd.networkAddUidRanges(
newDefaultNetwork.network.getNetId(), newDefaultNetwork.network.getNetId(),
toUidRangeStableParcels(nri.getUids())); toUidRangeStableParcels(nri.getUids())
/* nri.getDefaultNetworkPriority() */);
} }
if (null != oldDefaultNetwork) { if (null != oldDefaultNetwork) {
// TODO: Passing default network priority to netd.
mNetd.networkRemoveUidRanges( mNetd.networkRemoveUidRanges(
oldDefaultNetwork.network.getNetId(), oldDefaultNetwork.network.getNetId(),
toUidRangeStableParcels(nri.getUids())); toUidRangeStableParcels(nri.getUids())
/* nri.getDefaultNetworkPriority() */);
} }
} catch (RemoteException | ServiceSpecificException e) { } catch (RemoteException | ServiceSpecificException e) {
loge("Exception setting app default network", e); loge("Exception setting app default network", e);
@@ -9754,7 +9803,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
nrs.add(createDefaultInternetRequestForTransport( nrs.add(createDefaultInternetRequestForTransport(
TYPE_NONE, NetworkRequest.Type.TRACK_DEFAULT)); TYPE_NONE, NetworkRequest.Type.TRACK_DEFAULT));
setNetworkRequestUids(nrs, UidRange.fromIntRanges(pref.capabilities.getUids())); setNetworkRequestUids(nrs, UidRange.fromIntRanges(pref.capabilities.getUids()));
final NetworkRequestInfo nri = new NetworkRequestInfo(Process.myUid(), nrs); final NetworkRequestInfo nri = new NetworkRequestInfo(Process.myUid(), nrs,
DEFAULT_NETWORK_PRIORITY_PROFILE);
result.add(nri); result.add(nri);
} }
return result; return result;
@@ -9824,7 +9874,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
ranges.add(new UidRange(uid, uid)); ranges.add(new UidRange(uid, uid));
} }
setNetworkRequestUids(requests, ranges); setNetworkRequestUids(requests, ranges);
nris.add(new NetworkRequestInfo(Process.myUid(), requests)); nris.add(new NetworkRequestInfo(Process.myUid(), requests,
DEFAULT_NETWORK_PRIORITY_MOBILE_DATA_PREFERRED));
return nris; return nris;
} }
@@ -10134,7 +10185,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
ranges.add(new UidRange(uid, uid)); ranges.add(new UidRange(uid, uid));
} }
setNetworkRequestUids(requests, ranges); setNetworkRequestUids(requests, ranges);
return new NetworkRequestInfo(Process.myUid(), requests); return new NetworkRequestInfo(
Process.myUid(), requests, DEFAULT_NETWORK_PRIORITY_OEM);
} }
private NetworkRequest createUnmeteredNetworkRequest() { private NetworkRequest createUnmeteredNetworkRequest() {

View File

@@ -118,6 +118,8 @@ import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALID
import static android.os.Process.INVALID_UID; import static android.os.Process.INVALID_UID;
import static android.system.OsConstants.IPPROTO_TCP; import static android.system.OsConstants.IPPROTO_TCP;
import static com.android.server.ConnectivityService.DEFAULT_NETWORK_PRIORITY_MOBILE_DATA_PREFERRED;
import static com.android.server.ConnectivityService.DEFAULT_NETWORK_PRIORITY_OEM;
import static com.android.server.ConnectivityServiceTestUtils.transportToLegacyType; import static com.android.server.ConnectivityServiceTestUtils.transportToLegacyType;
import static com.android.testutils.ConcurrentUtils.await; import static com.android.testutils.ConcurrentUtils.await;
import static com.android.testutils.ConcurrentUtils.durationOf; import static com.android.testutils.ConcurrentUtils.durationOf;
@@ -10737,8 +10739,9 @@ public class ConnectivityServiceTest {
mService.new OemNetworkRequestFactory() mService.new OemNetworkRequestFactory()
.createNrisFromOemNetworkPreferences( .createNrisFromOemNetworkPreferences(
createDefaultOemNetworkPreferences(prefToTest)); createDefaultOemNetworkPreferences(prefToTest));
final NetworkRequestInfo nri = nris.iterator().next();
final List<NetworkRequest> mRequests = nris.iterator().next().mRequests; assertEquals(DEFAULT_NETWORK_PRIORITY_OEM, nri.getDefaultNetworkPriority());
final List<NetworkRequest> mRequests = nri.mRequests;
assertEquals(expectedNumOfNris, nris.size()); assertEquals(expectedNumOfNris, nris.size());
assertEquals(expectedNumOfRequests, mRequests.size()); assertEquals(expectedNumOfRequests, mRequests.size());
assertTrue(mRequests.get(0).isListen()); assertTrue(mRequests.get(0).isListen());
@@ -10766,8 +10769,9 @@ public class ConnectivityServiceTest {
mService.new OemNetworkRequestFactory() mService.new OemNetworkRequestFactory()
.createNrisFromOemNetworkPreferences( .createNrisFromOemNetworkPreferences(
createDefaultOemNetworkPreferences(prefToTest)); createDefaultOemNetworkPreferences(prefToTest));
final NetworkRequestInfo nri = nris.iterator().next();
final List<NetworkRequest> mRequests = nris.iterator().next().mRequests; assertEquals(DEFAULT_NETWORK_PRIORITY_OEM, nri.getDefaultNetworkPriority());
final List<NetworkRequest> mRequests = nri.mRequests;
assertEquals(expectedNumOfNris, nris.size()); assertEquals(expectedNumOfNris, nris.size());
assertEquals(expectedNumOfRequests, mRequests.size()); assertEquals(expectedNumOfRequests, mRequests.size());
assertTrue(mRequests.get(0).isListen()); assertTrue(mRequests.get(0).isListen());
@@ -10792,8 +10796,9 @@ public class ConnectivityServiceTest {
mService.new OemNetworkRequestFactory() mService.new OemNetworkRequestFactory()
.createNrisFromOemNetworkPreferences( .createNrisFromOemNetworkPreferences(
createDefaultOemNetworkPreferences(prefToTest)); createDefaultOemNetworkPreferences(prefToTest));
final NetworkRequestInfo nri = nris.iterator().next();
final List<NetworkRequest> mRequests = nris.iterator().next().mRequests; assertEquals(DEFAULT_NETWORK_PRIORITY_OEM, nri.getDefaultNetworkPriority());
final List<NetworkRequest> mRequests = nri.mRequests;
assertEquals(expectedNumOfNris, nris.size()); assertEquals(expectedNumOfNris, nris.size());
assertEquals(expectedNumOfRequests, mRequests.size()); assertEquals(expectedNumOfRequests, mRequests.size());
assertTrue(mRequests.get(0).isRequest()); assertTrue(mRequests.get(0).isRequest());
@@ -10815,8 +10820,9 @@ public class ConnectivityServiceTest {
mService.new OemNetworkRequestFactory() mService.new OemNetworkRequestFactory()
.createNrisFromOemNetworkPreferences( .createNrisFromOemNetworkPreferences(
createDefaultOemNetworkPreferences(prefToTest)); createDefaultOemNetworkPreferences(prefToTest));
final NetworkRequestInfo nri = nris.iterator().next();
final List<NetworkRequest> mRequests = nris.iterator().next().mRequests; assertEquals(DEFAULT_NETWORK_PRIORITY_OEM, nri.getDefaultNetworkPriority());
final List<NetworkRequest> mRequests = nri.mRequests;
assertEquals(expectedNumOfNris, nris.size()); assertEquals(expectedNumOfNris, nris.size());
assertEquals(expectedNumOfRequests, mRequests.size()); assertEquals(expectedNumOfRequests, mRequests.size());
assertTrue(mRequests.get(0).isRequest()); assertTrue(mRequests.get(0).isRequest());
@@ -13004,6 +13010,8 @@ public class ConnectivityServiceTest {
assertEquals(1, nris.size()); assertEquals(1, nris.size());
assertTrue(nri.isMultilayerRequest()); assertTrue(nri.isMultilayerRequest());
assertEquals(nri.getUids(), uidRangesForUids(uids)); assertEquals(nri.getUids(), uidRangesForUids(uids));
assertEquals(DEFAULT_NETWORK_PRIORITY_MOBILE_DATA_PREFERRED,
nri.getDefaultNetworkPriority());
} }
/** /**