diff options
Diffstat (limited to 'java/com/android/server/ethernet/EthernetNetworkFactory.java')
-rw-r--r-- | java/com/android/server/ethernet/EthernetNetworkFactory.java | 46 |
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(); } |