From bae105a5ccd11430bab14721d1325e2303a673da Mon Sep 17 00:00:00 2001 From: Hugo Benichi Date: Wed, 16 Aug 2017 13:19:04 +0900 Subject: [PATCH] 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 Change-Id: I2a1b3f9c0be6415e40edc989d0c1b03b5631f7b1 --- core/java/android/net/NetworkCapabilities.java | 1 - services/core/java/com/android/server/ConnectivityService.java | 10 +++++++--- 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 897280262b1e..0babbc898f5b 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -4702,11 +4702,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); } } -- 2.11.0