Loading services/core/java/com/android/server/vcn/Vcn.java +6 −7 Original line number Original line Diff line number Diff line Loading @@ -168,8 +168,8 @@ public class Vcn extends Handler { @NonNull NetworkRequest request, int score, int providerId) { @NonNull NetworkRequest request, int score, int providerId) { if (score > getNetworkScore()) { if (score > getNetworkScore()) { Slog.v(getLogTag(), Slog.v(getLogTag(), "Request " + request.requestId + " already satisfied by higher-scoring (" "Request already satisfied by higher-scoring (" + score + ") network from " + score + ") network from provider " + providerId); + "provider " + providerId + ": " + request); return; return; } } Loading @@ -177,8 +177,7 @@ public class Vcn extends Handler { for (VcnGatewayConnectionConfig gatewayConnectionConfig : mVcnGatewayConnections.keySet()) { for (VcnGatewayConnectionConfig gatewayConnectionConfig : mVcnGatewayConnections.keySet()) { if (requestSatisfiedByGatewayConnectionConfig(request, gatewayConnectionConfig)) { if (requestSatisfiedByGatewayConnectionConfig(request, gatewayConnectionConfig)) { Slog.v(getLogTag(), Slog.v(getLogTag(), "Request " + request.requestId "Request already satisfied by existing VcnGatewayConnection: " + request); + " satisfied by existing VcnGatewayConnection"); return; return; } } } } Loading @@ -202,12 +201,12 @@ public class Vcn extends Handler { private boolean requestSatisfiedByGatewayConnectionConfig( private boolean requestSatisfiedByGatewayConnectionConfig( @NonNull NetworkRequest request, @NonNull VcnGatewayConnectionConfig config) { @NonNull NetworkRequest request, @NonNull VcnGatewayConnectionConfig config) { final NetworkCapabilities configCaps = new NetworkCapabilities(); final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(); for (int cap : config.getAllExposedCapabilities()) { for (int cap : config.getAllExposedCapabilities()) { configCaps.addCapability(cap); builder.addCapability(cap); } } return request.networkCapabilities.satisfiedByNetworkCapabilities(configCaps); return request.canBeSatisfiedBy(builder.build()); } } private String getLogTag() { private String getLogTag() { Loading services/core/java/com/android/server/vcn/VcnGatewayConnection.java +6 −6 Original line number Original line Diff line number Diff line Loading @@ -963,18 +963,18 @@ public class VcnGatewayConnection extends StateMachine { @VisibleForTesting(visibility = Visibility.PRIVATE) @VisibleForTesting(visibility = Visibility.PRIVATE) static NetworkCapabilities buildNetworkCapabilities( static NetworkCapabilities buildNetworkCapabilities( @NonNull VcnGatewayConnectionConfig gatewayConnectionConfig) { @NonNull VcnGatewayConnectionConfig gatewayConnectionConfig) { final NetworkCapabilities caps = new NetworkCapabilities(); final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(); caps.addTransportType(TRANSPORT_CELLULAR); builder.addTransportType(TRANSPORT_CELLULAR); caps.addCapability(NET_CAPABILITY_NOT_CONGESTED); builder.addCapability(NET_CAPABILITY_NOT_CONGESTED); caps.addCapability(NET_CAPABILITY_NOT_SUSPENDED); builder.addCapability(NET_CAPABILITY_NOT_SUSPENDED); // Add exposed capabilities // Add exposed capabilities for (int cap : gatewayConnectionConfig.getAllExposedCapabilities()) { for (int cap : gatewayConnectionConfig.getAllExposedCapabilities()) { caps.addCapability(cap); builder.addCapability(cap); } } return caps; return builder.build(); } } private static LinkProperties buildConnectedLinkProperties( private static LinkProperties buildConnectedLinkProperties( Loading services/core/java/com/android/server/vcn/VcnNetworkProvider.java +14 −6 Original line number Original line Diff line number Diff line Loading @@ -21,9 +21,9 @@ import android.content.Context; import android.net.NetworkProvider; import android.net.NetworkProvider; import android.net.NetworkRequest; import android.net.NetworkRequest; import android.os.Looper; import android.os.Looper; import android.util.ArrayMap; import android.util.ArraySet; import android.util.ArraySet; import android.util.Slog; import android.util.Slog; import android.util.SparseArray; import java.util.Objects; import java.util.Objects; import java.util.Set; import java.util.Set; Loading @@ -40,7 +40,13 @@ public class VcnNetworkProvider extends NetworkProvider { private static final String TAG = VcnNetworkProvider.class.getSimpleName(); private static final String TAG = VcnNetworkProvider.class.getSimpleName(); private final Set<NetworkRequestListener> mListeners = new ArraySet<>(); private final Set<NetworkRequestListener> mListeners = new ArraySet<>(); private final SparseArray<NetworkRequestEntry> mRequests = new SparseArray<>(); /** * Cache of NetworkRequest(s), scores and network providers, keyed by NetworkRequest * * <p>NetworkRequests are immutable once created, and therefore can be used as stable keys. */ private final ArrayMap<NetworkRequest, NetworkRequestEntry> mRequests = new ArrayMap<>(); public VcnNetworkProvider(Context context, Looper looper) { public VcnNetworkProvider(Context context, Looper looper) { super(context, looper, VcnNetworkProvider.class.getSimpleName()); super(context, looper, VcnNetworkProvider.class.getSimpleName()); Loading @@ -51,8 +57,8 @@ public class VcnNetworkProvider extends NetworkProvider { mListeners.add(listener); mListeners.add(listener); // Send listener all cached requests // Send listener all cached requests for (int i = 0; i < mRequests.size(); i++) { for (NetworkRequestEntry entry : mRequests.values()) { notifyListenerForEvent(listener, mRequests.valueAt(i)); notifyListenerForEvent(listener, entry); } } } } Loading @@ -75,7 +81,9 @@ public class VcnNetworkProvider extends NetworkProvider { request, score, providerId)); request, score, providerId)); final NetworkRequestEntry entry = new NetworkRequestEntry(request, score, providerId); final NetworkRequestEntry entry = new NetworkRequestEntry(request, score, providerId); mRequests.put(request.requestId, entry); // NetworkRequests are immutable once created, and therefore can be used as stable keys. mRequests.put(request, entry); // TODO(b/176939047): Intelligently route requests to prioritized VcnInstances (based on // TODO(b/176939047): Intelligently route requests to prioritized VcnInstances (based on // Default Data Sub, or similar) // Default Data Sub, or similar) Loading @@ -86,7 +94,7 @@ public class VcnNetworkProvider extends NetworkProvider { @Override @Override public void onNetworkRequestWithdrawn(@NonNull NetworkRequest request) { public void onNetworkRequestWithdrawn(@NonNull NetworkRequest request) { mRequests.remove(request.requestId); mRequests.remove(request); } } private static class NetworkRequestEntry { private static class NetworkRequestEntry { Loading Loading
services/core/java/com/android/server/vcn/Vcn.java +6 −7 Original line number Original line Diff line number Diff line Loading @@ -168,8 +168,8 @@ public class Vcn extends Handler { @NonNull NetworkRequest request, int score, int providerId) { @NonNull NetworkRequest request, int score, int providerId) { if (score > getNetworkScore()) { if (score > getNetworkScore()) { Slog.v(getLogTag(), Slog.v(getLogTag(), "Request " + request.requestId + " already satisfied by higher-scoring (" "Request already satisfied by higher-scoring (" + score + ") network from " + score + ") network from provider " + providerId); + "provider " + providerId + ": " + request); return; return; } } Loading @@ -177,8 +177,7 @@ public class Vcn extends Handler { for (VcnGatewayConnectionConfig gatewayConnectionConfig : mVcnGatewayConnections.keySet()) { for (VcnGatewayConnectionConfig gatewayConnectionConfig : mVcnGatewayConnections.keySet()) { if (requestSatisfiedByGatewayConnectionConfig(request, gatewayConnectionConfig)) { if (requestSatisfiedByGatewayConnectionConfig(request, gatewayConnectionConfig)) { Slog.v(getLogTag(), Slog.v(getLogTag(), "Request " + request.requestId "Request already satisfied by existing VcnGatewayConnection: " + request); + " satisfied by existing VcnGatewayConnection"); return; return; } } } } Loading @@ -202,12 +201,12 @@ public class Vcn extends Handler { private boolean requestSatisfiedByGatewayConnectionConfig( private boolean requestSatisfiedByGatewayConnectionConfig( @NonNull NetworkRequest request, @NonNull VcnGatewayConnectionConfig config) { @NonNull NetworkRequest request, @NonNull VcnGatewayConnectionConfig config) { final NetworkCapabilities configCaps = new NetworkCapabilities(); final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(); for (int cap : config.getAllExposedCapabilities()) { for (int cap : config.getAllExposedCapabilities()) { configCaps.addCapability(cap); builder.addCapability(cap); } } return request.networkCapabilities.satisfiedByNetworkCapabilities(configCaps); return request.canBeSatisfiedBy(builder.build()); } } private String getLogTag() { private String getLogTag() { Loading
services/core/java/com/android/server/vcn/VcnGatewayConnection.java +6 −6 Original line number Original line Diff line number Diff line Loading @@ -963,18 +963,18 @@ public class VcnGatewayConnection extends StateMachine { @VisibleForTesting(visibility = Visibility.PRIVATE) @VisibleForTesting(visibility = Visibility.PRIVATE) static NetworkCapabilities buildNetworkCapabilities( static NetworkCapabilities buildNetworkCapabilities( @NonNull VcnGatewayConnectionConfig gatewayConnectionConfig) { @NonNull VcnGatewayConnectionConfig gatewayConnectionConfig) { final NetworkCapabilities caps = new NetworkCapabilities(); final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(); caps.addTransportType(TRANSPORT_CELLULAR); builder.addTransportType(TRANSPORT_CELLULAR); caps.addCapability(NET_CAPABILITY_NOT_CONGESTED); builder.addCapability(NET_CAPABILITY_NOT_CONGESTED); caps.addCapability(NET_CAPABILITY_NOT_SUSPENDED); builder.addCapability(NET_CAPABILITY_NOT_SUSPENDED); // Add exposed capabilities // Add exposed capabilities for (int cap : gatewayConnectionConfig.getAllExposedCapabilities()) { for (int cap : gatewayConnectionConfig.getAllExposedCapabilities()) { caps.addCapability(cap); builder.addCapability(cap); } } return caps; return builder.build(); } } private static LinkProperties buildConnectedLinkProperties( private static LinkProperties buildConnectedLinkProperties( Loading
services/core/java/com/android/server/vcn/VcnNetworkProvider.java +14 −6 Original line number Original line Diff line number Diff line Loading @@ -21,9 +21,9 @@ import android.content.Context; import android.net.NetworkProvider; import android.net.NetworkProvider; import android.net.NetworkRequest; import android.net.NetworkRequest; import android.os.Looper; import android.os.Looper; import android.util.ArrayMap; import android.util.ArraySet; import android.util.ArraySet; import android.util.Slog; import android.util.Slog; import android.util.SparseArray; import java.util.Objects; import java.util.Objects; import java.util.Set; import java.util.Set; Loading @@ -40,7 +40,13 @@ public class VcnNetworkProvider extends NetworkProvider { private static final String TAG = VcnNetworkProvider.class.getSimpleName(); private static final String TAG = VcnNetworkProvider.class.getSimpleName(); private final Set<NetworkRequestListener> mListeners = new ArraySet<>(); private final Set<NetworkRequestListener> mListeners = new ArraySet<>(); private final SparseArray<NetworkRequestEntry> mRequests = new SparseArray<>(); /** * Cache of NetworkRequest(s), scores and network providers, keyed by NetworkRequest * * <p>NetworkRequests are immutable once created, and therefore can be used as stable keys. */ private final ArrayMap<NetworkRequest, NetworkRequestEntry> mRequests = new ArrayMap<>(); public VcnNetworkProvider(Context context, Looper looper) { public VcnNetworkProvider(Context context, Looper looper) { super(context, looper, VcnNetworkProvider.class.getSimpleName()); super(context, looper, VcnNetworkProvider.class.getSimpleName()); Loading @@ -51,8 +57,8 @@ public class VcnNetworkProvider extends NetworkProvider { mListeners.add(listener); mListeners.add(listener); // Send listener all cached requests // Send listener all cached requests for (int i = 0; i < mRequests.size(); i++) { for (NetworkRequestEntry entry : mRequests.values()) { notifyListenerForEvent(listener, mRequests.valueAt(i)); notifyListenerForEvent(listener, entry); } } } } Loading @@ -75,7 +81,9 @@ public class VcnNetworkProvider extends NetworkProvider { request, score, providerId)); request, score, providerId)); final NetworkRequestEntry entry = new NetworkRequestEntry(request, score, providerId); final NetworkRequestEntry entry = new NetworkRequestEntry(request, score, providerId); mRequests.put(request.requestId, entry); // NetworkRequests are immutable once created, and therefore can be used as stable keys. mRequests.put(request, entry); // TODO(b/176939047): Intelligently route requests to prioritized VcnInstances (based on // TODO(b/176939047): Intelligently route requests to prioritized VcnInstances (based on // Default Data Sub, or similar) // Default Data Sub, or similar) Loading @@ -86,7 +94,7 @@ public class VcnNetworkProvider extends NetworkProvider { @Override @Override public void onNetworkRequestWithdrawn(@NonNull NetworkRequest request) { public void onNetworkRequestWithdrawn(@NonNull NetworkRequest request) { mRequests.remove(request.requestId); mRequests.remove(request); } } private static class NetworkRequestEntry { private static class NetworkRequestEntry { Loading