diff options
author | Chalard Jean <jchalard@google.com> | 2021-01-20 20:47:32 +0900 |
---|---|---|
committer | Chalard Jean <jchalard@google.com> | 2021-03-19 13:50:56 +0900 |
commit | b5dbd7f46da55029d72ff11ece039ae00514b7ef (patch) | |
tree | a219c5c45ea74929b173890b33ebcf5e90b0c766 /services | |
parent | 47157e77113e9362e9a511c9c0be99639cc5139a (diff) |
[NS02] Mix in validation of the score
Test: FrameworksNetTests FrameworksWifiTests NetworkStackTests
Change-Id: I9cac3a05ad0c4008599973b12d2c5e4c02233a5c
Diffstat (limited to 'services')
-rw-r--r-- | services/core/java/com/android/server/connectivity/FullScore.java | 68 | ||||
-rw-r--r-- | services/core/java/com/android/server/connectivity/NetworkAgentInfo.java | 15 |
2 files changed, 79 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/connectivity/FullScore.java b/services/core/java/com/android/server/connectivity/FullScore.java new file mode 100644 index 000000000000..ac5988a3323a --- /dev/null +++ b/services/core/java/com/android/server/connectivity/FullScore.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.connectivity; + +import android.annotation.NonNull; +import android.net.NetworkScore; + +/** + * This class represents how desirable a network is. + * + * FullScore is very similar to NetworkScore, but it contains the bits that are managed + * by ConnectivityService. This provides static guarantee that all users must know whether + * they are handling a score that had the CS-managed bits set. + */ +public class FullScore { + // This will be removed soon. Do *NOT* depend on it for any new code that is not part of + // a migration. + private final int mLegacyInt; + + // Agent-managed policies are in NetworkScore. They start from 1. + // CS-managed policies + // This network is validated. CS-managed because the source of truth is in NetworkCapabilities. + public static final int POLICY_IS_VALIDATED = 63; + + // Bitmask of all the policies applied to this score. + private final long mPolicies; + + FullScore(final int legacyInt, final long policies) { + mLegacyInt = legacyInt; + mPolicies = policies; + } + + /** + * Make a FullScore from a NetworkScore + */ + public static FullScore withPolicy(@NonNull final NetworkScore originalScore, + final boolean isValidated) { + return new FullScore(originalScore.getLegacyInt(), + isValidated ? 1L << POLICY_IS_VALIDATED : 0L); + } + + /** + * For backward compatibility, get the legacy int. + * This will be removed before S is published. + */ + public int getLegacyInt() { + return mLegacyInt; + } + + @Override + public String toString() { + return "Score(" + mLegacyInt + ")"; + } +} diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java index e44dcf5975f1..372601f485bf 100644 --- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java @@ -17,6 +17,7 @@ package com.android.server.connectivity; import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport; +import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.transportNamesOf; import android.annotation.NonNull; @@ -303,8 +304,9 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> { // validated). private boolean mInactive; - // This represents the quality of the network. - private NetworkScore mScore; + // This represents the quality of the network. As opposed to NetworkScore, FullScore includes + // the ConnectivityService-managed bits. + private FullScore mScore; // The list of NetworkRequests being satisfied by this Network. private final SparseArray<NetworkRequest> mNetworkRequests = new SparseArray<>(); @@ -356,7 +358,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> { networkInfo = info; linkProperties = lp; networkCapabilities = nc; - mScore = score; + mScore = mixInScore(score, nc); clatd = new Nat464Xlat(this, netd, dnsResolver, deps); mConnService = connService; mContext = context; @@ -890,7 +892,12 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> { } public void setScore(final NetworkScore score) { - mScore = score; + mScore = mixInScore(score, networkCapabilities); + } + + private static FullScore mixInScore(@NonNull final NetworkScore score, + @NonNull final NetworkCapabilities caps) { + return FullScore.withPolicy(score, caps.hasCapability(NET_CAPABILITY_VALIDATED)); } /** |