summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hugo Benichi <hugobenichi@google.com> 2017-08-16 13:19:04 +0900
committer Hugo Benichi <hugobenichi@google.com> 2017-08-17 10:48:41 +0900
commit86fc53aa7ae36b478531636dd55a696d78526fa9 (patch)
tree13b916cabde5db4d8a30178ee7fb123aba40ed06
parentea783a090554bc033289106f5b5bfc425a924bd7 (diff)
Allow NetworkAgent "immutable updates" to NetworkCapabilities
This patch loosens the validation checks when a NetworkAgent updates it NetworkCapabilities: instead of checking that capabilities labeled as "immutable" stay identical across updates, it is now accepted to change immutable capabilities in a way that the new NetworkCapabilities satisfies the old NetworkCapabilities. This allows a NetworkAgent to update itself in order to match more requests, but will still catch NetworkAgents that sends degradation updates causing potentially requests to not match anymore. Bug: 64125969 Test: runtest frameworks-net Merged-In: I2a1b3f9c0be6415e40edc989d0c1b03b5631f7b1 Merged-In: I0ab76de59e87c46a6961229399ff7200bce49838 Merged-In: Ied592bf6112574399a1e808da337004e1c35f244 Merged-In: I01e287b4df82a53a522566d33b3166f7801badca Merged-In: I7ee60daa9c4266e9b9179032815dd7267e06377f Merged-In: I31ef741eb83d64c476e5930d5762514b5d4cb16f (cherry picked from commit bae105a5ccd11430bab14721d1325e2303a673da) Change-Id: I9d630d63336f4db69f3eb52faa8483f1b1e35d16
-rw-r--r--core/java/android/net/NetworkCapabilities.java1
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java10
2 files changed, 7 insertions, 4 deletions
diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java
index 0b9289345dbe..4bb884405360 100644
--- a/core/java/android/net/NetworkCapabilities.java
+++ b/core/java/android/net/NetworkCapabilities.java
@@ -770,7 +770,6 @@ public final class NetworkCapabilities implements Parcelable {
StringJoiner joiner = new StringJoiner(", ");
- // TODO: consider only enforcing that capabilities are not removed, allowing addition.
// Ignore NOT_METERED being added or removed as it is effectively dynamic. http://b/63326103
// TODO: properly support NOT_METERED as a mutable and requestable capability.
final long mask = ~MUTABLE_CAPABILITIES & ~(1 << NET_CAPABILITY_NOT_METERED);
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index ac41079e5237..5110929bb947 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -4582,11 +4582,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/
private void updateCapabilities(
int oldScore, NetworkAgentInfo nai, NetworkCapabilities networkCapabilities) {
- // Sanity check: a NetworkAgent should not change its static capabilities or parameters.
- if (nai.everConnected) {
+ // Once a NetworkAgent is connected, complain if some immutable capabilities are removed.
+ if (nai.everConnected &&
+ !nai.networkCapabilities.satisfiedByNetworkCapabilities(networkCapabilities)) {
+ // TODO: consider not complaining when a network agent degrade its capabilities if this
+ // does not cause any request (that is not a listen) currently matching that agent to
+ // stop being matched by the updated agent.
String diff = nai.networkCapabilities.describeImmutableDifferences(networkCapabilities);
if (!TextUtils.isEmpty(diff)) {
- Slog.wtf(TAG, "BUG: " + nai + " changed immutable capabilities:" + diff);
+ Slog.wtf(TAG, "BUG: " + nai + " lost immutable capabilities:" + diff);
}
}