Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b502f7e5 authored by Chalard Jean's avatar Chalard Jean Committed by Automerger Merge Worker
Browse files

Merge "[NS02] Mix in validation of the score" am: 93a3f18a am: 5f96b8c5...

Merge "[NS02] Mix in validation of the score" am: 93a3f18a am: 5f96b8c5 am: 37e8ecdb am: 6d35a788

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1556100

Change-Id: If5ac321b22867ac09a5d881dbd6dbbd7d10a2d24
parents faba8616 6d35a788
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -33,13 +33,21 @@ public final class NetworkScore implements Parcelable {
    // a migration.
    private final int mLegacyInt;

    // Agent-managed policies
    // TODO : add them here, starting from 1

    // Bitmask of all the policies applied to this score.
    private final long mPolicies;

    /** @hide */
    NetworkScore(final int legacyInt) {
        this.mLegacyInt = legacyInt;
    NetworkScore(final int legacyInt, final long policies) {
        mLegacyInt = legacyInt;
        mPolicies = policies;
    }

    private NetworkScore(@NonNull final Parcel in) {
        mLegacyInt = in.readInt();
        mPolicies = in.readLong();
    }

    public int getLegacyInt() {
@@ -54,6 +62,7 @@ public final class NetworkScore implements Parcelable {
    @Override
    public void writeToParcel(@NonNull final Parcel dest, final int flags) {
        dest.writeInt(mLegacyInt);
        dest.writeLong(mPolicies);
    }

    @Override
@@ -79,6 +88,7 @@ public final class NetworkScore implements Parcelable {
     * A builder for NetworkScore.
     */
    public static final class Builder {
        private static final long POLICY_NONE = 0L;
        private static final int INVALID_LEGACY_INT = Integer.MIN_VALUE;
        private int mLegacyInt = INVALID_LEGACY_INT;

@@ -102,7 +112,7 @@ public final class NetworkScore implements Parcelable {
         */
        @NonNull
        public NetworkScore build() {
            return new NetworkScore(mLegacyInt);
            return new NetworkScore(mLegacyInt, POLICY_NONE);
        }
    }
}
+68 −0
Original line number Diff line number Diff line
/*
 * 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 + ")";
    }
}
+11 −4
Original line number Diff line number Diff line
@@ -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));
    }

    /**