summaryrefslogtreecommitdiff
path: root/java/com/android/server/ethernet/EthernetNetworkFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/server/ethernet/EthernetNetworkFactory.java')
-rw-r--r--java/com/android/server/ethernet/EthernetNetworkFactory.java46
1 files changed, 20 insertions, 26 deletions
diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java
index 28b24f1..793b284 100644
--- a/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -16,13 +16,13 @@
package com.android.server.ethernet;
+import static android.net.shared.LinkPropertiesParcelableUtil.toStableParcelable;
import static com.android.internal.util.Preconditions.checkNotNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.net.ConnectivityManager;
-import android.net.EthernetNetworkSpecifier;
import android.net.IpConfiguration;
import android.net.IpConfiguration.IpAssignment;
import android.net.IpConfiguration.ProxySettings;
@@ -33,6 +33,7 @@ import android.net.NetworkCapabilities;
import android.net.NetworkFactory;
import android.net.NetworkRequest;
import android.net.NetworkSpecifier;
+import android.net.StringNetworkSpecifier;
import android.net.ip.IIpClient;
import android.net.ip.IpClientCallbacks;
import android.net.ip.IpClientUtil;
@@ -49,8 +50,8 @@ import android.util.SparseArray;
import com.android.internal.util.IndentingPrintWriter;
import java.io.FileDescriptor;
-import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.Objects;
/**
* {@link NetworkFactory} that represents Ethernet networks.
@@ -86,16 +87,20 @@ public class EthernetNetworkFactory extends NetworkFactory {
}
@Override
- public boolean acceptRequest(NetworkRequest request) {
+ public boolean acceptRequest(NetworkRequest request, int score) {
+ if (request.type == NetworkRequest.Type.TRACK_DEFAULT) {
+ return false;
+ }
+
if (DBG) {
- Log.d(TAG, "acceptRequest, request: " + request);
+ Log.d(TAG, "acceptRequest, request: " + request + ", score: " + score);
}
return networkForRequest(request) != null;
}
@Override
- protected void needNetworkFor(NetworkRequest networkRequest) {
+ protected void needNetworkFor(NetworkRequest networkRequest, int score) {
NetworkInterfaceState network = networkForRequest(networkRequest);
if (network == null) {
@@ -156,22 +161,12 @@ public class EthernetNetworkFactory extends NetworkFactory {
updateCapabilityFilter();
}
- private static NetworkCapabilities mixInCapabilities(NetworkCapabilities nc,
- NetworkCapabilities addedNc) {
- final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(nc);
- for (int transport : addedNc.getTransportTypes()) builder.addTransportType(transport);
- for (int capability : addedNc.getCapabilities()) builder.addCapability(capability);
- return builder.build();
- }
-
private void updateCapabilityFilter() {
- NetworkCapabilities capabilitiesFilter =
- NetworkCapabilities.Builder.withoutDefaultCapabilities()
- .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
- .build();
+ NetworkCapabilities capabilitiesFilter = new NetworkCapabilities();
+ capabilitiesFilter.clearAll();
for (NetworkInterfaceState iface: mTrackingInterfaces.values()) {
- capabilitiesFilter = mixInCapabilities(capabilitiesFilter, iface.mCapabilities);
+ capabilitiesFilter.combineCapabilities(iface.mCapabilities);
}
if (DBG) Log.d(TAG, "updateCapabilityFilter: " + capabilitiesFilter);
@@ -215,21 +210,20 @@ public class EthernetNetworkFactory extends NetworkFactory {
private NetworkInterfaceState networkForRequest(NetworkRequest request) {
String requestedIface = null;
- NetworkSpecifier specifier = request.getNetworkSpecifier();
- if (specifier instanceof EthernetNetworkSpecifier) {
- requestedIface = ((EthernetNetworkSpecifier) specifier)
- .getInterfaceName();
+ NetworkSpecifier specifier = request.networkCapabilities.getNetworkSpecifier();
+ if (specifier instanceof StringNetworkSpecifier) {
+ requestedIface = ((StringNetworkSpecifier) specifier).specifier;
}
NetworkInterfaceState network = null;
if (!TextUtils.isEmpty(requestedIface)) {
NetworkInterfaceState n = mTrackingInterfaces.get(requestedIface);
- if (n != null && request.canBeSatisfiedBy(n.mCapabilities)) {
+ if (n != null && n.satisfied(request.networkCapabilities)) {
network = n;
}
} else {
for (NetworkInterfaceState n : mTrackingInterfaces.values()) {
- if (request.canBeSatisfiedBy(n.mCapabilities) && n.mLinkUp) {
+ if (n.satisfied(request.networkCapabilities) && n.mLinkUp) {
network = n;
break;
}
@@ -472,7 +466,6 @@ public class EthernetNetworkFactory extends NetworkFactory {
final NetworkAgentConfig config = new NetworkAgentConfig.Builder()
.setLegacyType(mLegacyType)
.setLegacyTypeName(NETWORK_TYPE)
- .setLegacyExtraInfo(mHwAddress)
.build();
mNetworkAgent = new NetworkAgent(mContext, mHandler.getLooper(),
NETWORK_TYPE, mCapabilities, mLinkProperties,
@@ -487,6 +480,7 @@ public class EthernetNetworkFactory extends NetworkFactory {
}
};
mNetworkAgent.register();
+ mNetworkAgent.setLegacyExtraInfo(mHwAddress);
mNetworkAgent.markConnected();
}
@@ -558,7 +552,7 @@ public class EthernetNetworkFactory extends NetworkFactory {
if (config.getProxySettings() == ProxySettings.STATIC ||
config.getProxySettings() == ProxySettings.PAC) {
try {
- ipClient.setHttpProxy(config.getHttpProxy());
+ ipClient.setHttpProxy(toStableParcelable(config.getHttpProxy()));
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}