diff options
-rw-r--r-- | Android.bp | 3 | ||||
-rw-r--r-- | src/android/net/apf/ApfFilter.java | 15 | ||||
-rw-r--r-- | src/android/net/dhcp/DhcpClient.java | 33 | ||||
-rw-r--r-- | src/android/net/dhcp/DhcpPacketListener.java | 2 | ||||
-rw-r--r-- | src/android/net/dhcp/DhcpServer.java | 6 | ||||
-rw-r--r-- | src/android/net/dhcp/DhcpServingParams.java | 12 | ||||
-rw-r--r-- | src/android/net/ip/ConnectivityPacketTracker.java | 15 | ||||
-rw-r--r-- | src/android/net/ip/IpClient.java | 13 | ||||
-rw-r--r-- | src/android/net/ip/IpNeighborMonitor.java | 16 | ||||
-rw-r--r-- | src/android/net/util/NetworkStackUtils.java | 13 | ||||
-rw-r--r-- | src/com/android/server/NetworkObserverRegistry.java | 4 | ||||
-rw-r--r-- | src/com/android/server/NetworkStackService.java | 14 | ||||
-rw-r--r-- | src/com/android/server/connectivity/NetworkMonitor.java | 10 | ||||
-rw-r--r-- | tests/src/android/net/util/PacketReaderTest.java | 25 | ||||
-rw-r--r-- | tests/src/com/android/server/connectivity/NetworkMonitorTest.java | 19 |
15 files changed, 106 insertions, 94 deletions
@@ -25,7 +25,8 @@ java_library { ":services-networkstack-shared-srcs", ], static_libs: [ - "services-netlink-lib", + "netd_aidl_interface-java", + "networkstack-aidl-interfaces-java", ] } diff --git a/src/android/net/apf/ApfFilter.java b/src/android/net/apf/ApfFilter.java index 08452bb..4fa7d64 100644 --- a/src/android/net/apf/ApfFilter.java +++ b/src/android/net/apf/ApfFilter.java @@ -38,7 +38,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.LinkAddress; import android.net.LinkProperties; -import android.net.NetworkUtils; import android.net.apf.ApfGenerator.IllegalInstructionException; import android.net.apf.ApfGenerator.Register; import android.net.ip.IpClient.IpClientCallbacksWrapper; @@ -47,6 +46,8 @@ import android.net.metrics.ApfStats; import android.net.metrics.IpConnectivityLog; import android.net.metrics.RaEvent; import android.net.util.InterfaceParams; +import android.net.util.NetworkStackUtils; +import android.net.util.SocketUtils; import android.os.PowerManager; import android.os.SystemClock; import android.system.ErrnoException; @@ -60,8 +61,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.HexDump; import com.android.internal.util.IndentingPrintWriter; -import libcore.io.IoBridge; - import java.io.FileDescriptor; import java.io.IOException; import java.net.Inet4Address; @@ -200,10 +199,8 @@ public class ApfFilter { public void halt() { mStopped = true; - try { - // Interrupts the read() call the thread is blocked in. - IoBridge.closeAndSignalBlockedThreads(mSocket); - } catch (IOException ignored) {} + // Interrupts the read() call the thread is blocked in. + NetworkStackUtils.closeSocketQuietly(mSocket); } @Override @@ -470,8 +467,8 @@ public class ApfFilter { socket = Os.socket(AF_PACKET, SOCK_RAW, ETH_P_IPV6); SocketAddress addr = makePacketSocketAddress( (short) ETH_P_IPV6, mInterfaceParams.index); - Os.bind(socket, addr); - NetworkUtils.attachRaFilter(socket, mApfCapabilities.apfPacketFormat); + SocketUtils.bindSocket(socket, addr); + SocketUtils.attachRaFilter(socket, mApfCapabilities.apfPacketFormat); } catch(SocketException|ErrnoException e) { Log.e(TAG, "Error starting filter", e); return; diff --git a/src/android/net/dhcp/DhcpClient.java b/src/android/net/dhcp/DhcpClient.java index 12eecc0..b0e8da9 100644 --- a/src/android/net/dhcp/DhcpClient.java +++ b/src/android/net/dhcp/DhcpClient.java @@ -28,6 +28,7 @@ import static android.net.dhcp.DhcpPacket.DHCP_SUBNET_MASK; import static android.net.dhcp.DhcpPacket.DHCP_VENDOR_INFO; import static android.net.dhcp.DhcpPacket.INADDR_ANY; import static android.net.dhcp.DhcpPacket.INADDR_BROADCAST; +import static android.net.util.NetworkStackUtils.closeSocketQuietly; import static android.net.util.SocketUtils.makePacketSocketAddress; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.AF_PACKET; @@ -44,7 +45,6 @@ import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ANY; import android.content.Context; import android.net.DhcpResults; -import android.net.NetworkUtils; import android.net.TrafficStats; import android.net.ip.IpClient; import android.net.metrics.DhcpClientEvent; @@ -66,8 +66,6 @@ import com.android.internal.util.State; import com.android.internal.util.StateMachine; import com.android.internal.util.WakeupMessage; -import libcore.io.IoBridge; - import java.io.FileDescriptor; import java.io.IOException; import java.net.Inet4Address; @@ -108,6 +106,12 @@ public class DhcpClient extends StateMachine { private static final boolean MSG_DBG = false; private static final boolean PACKET_DBG = false; + // Metrics events: must be kept in sync with server-side aggregation code. + /** Represents transitions from DhcpInitState to DhcpBoundState */ + private static final String EVENT_INITIAL_BOUND = "InitialBoundState"; + /** Represents transitions from and to DhcpBoundState via DhcpRenewingState */ + private static final String EVENT_RENEWING_BOUND = "RenewingBoundState"; + // Timers and timeouts. private static final int SECONDS = 1000; private static final int FIRST_TIMEOUT_MS = 2 * SECONDS; @@ -313,8 +317,8 @@ public class DhcpClient extends StateMachine { try { mPacketSock = Os.socket(AF_PACKET, SOCK_RAW, ETH_P_IP); SocketAddress addr = makePacketSocketAddress((short) ETH_P_IP, mIface.index); - Os.bind(mPacketSock, addr); - NetworkUtils.attachDhcpFilter(mPacketSock); + SocketUtils.bindSocket(mPacketSock, addr); + SocketUtils.attachDhcpFilter(mPacketSock); } catch(SocketException|ErrnoException e) { Log.e(TAG, "Error creating packet socket", e); return false; @@ -350,15 +354,9 @@ public class DhcpClient extends StateMachine { } } - private static void closeQuietly(FileDescriptor fd) { - try { - IoBridge.closeAndSignalBlockedThreads(fd); - } catch (IOException ignored) {} - } - private void closeSockets() { - closeQuietly(mUdpSock); - closeQuietly(mPacketSock); + closeSocketQuietly(mUdpSock); + closeSocketQuietly(mPacketSock); } class ReceiveThread extends Thread { @@ -414,7 +412,8 @@ public class DhcpClient extends StateMachine { try { if (encap == DhcpPacket.ENCAP_L2) { if (DBG) Log.d(TAG, "Broadcasting " + description); - Os.sendto(mPacketSock, buf.array(), 0, buf.limit(), 0, mInterfaceBroadcastAddr); + SocketUtils.sendTo( + mPacketSock, buf.array(), 0, buf.limit(), 0, mInterfaceBroadcastAddr); } else if (encap == DhcpPacket.ENCAP_BOOTP && to.equals(INADDR_BROADCAST)) { if (DBG) Log.d(TAG, "Broadcasting " + description); // We only send L3-encapped broadcasts in DhcpRebindingState, @@ -928,9 +927,9 @@ public class DhcpClient extends StateMachine { private void logTimeToBoundState() { long now = SystemClock.elapsedRealtime(); if (mLastBoundExitTime > mLastInitEnterTime) { - logState(DhcpClientEvent.RENEWING_BOUND, (int)(now - mLastBoundExitTime)); + logState(EVENT_RENEWING_BOUND, (int) (now - mLastBoundExitTime)); } else { - logState(DhcpClientEvent.INITIAL_BOUND, (int)(now - mLastInitEnterTime)); + logState(EVENT_INITIAL_BOUND, (int) (now - mLastInitEnterTime)); } } } @@ -1021,7 +1020,7 @@ public class DhcpClient extends StateMachine { // We need to broadcast and possibly reconnect the socket to a // completely different server. - closeQuietly(mUdpSock); + closeSocketQuietly(mUdpSock); if (!initUdpSocket()) { Log.e(TAG, "Failed to recreate UDP socket"); transitionTo(mDhcpInitState); diff --git a/src/android/net/dhcp/DhcpPacketListener.java b/src/android/net/dhcp/DhcpPacketListener.java index eac8d2a..96d1a28 100644 --- a/src/android/net/dhcp/DhcpPacketListener.java +++ b/src/android/net/dhcp/DhcpPacketListener.java @@ -64,7 +64,7 @@ abstract class DhcpPacketListener extends FdEventsReader<DhcpPacketListener.Payl @Override protected int readPacket(@NonNull FileDescriptor fd, @NonNull Payload packetBuffer) throws Exception { - final InetSocketAddress addr = new InetSocketAddress(); + final InetSocketAddress addr = new InetSocketAddress(0); final int read = Os.recvfrom( fd, packetBuffer.mBytes, 0, packetBuffer.mBytes.length, 0 /* flags */, addr); diff --git a/src/android/net/dhcp/DhcpServer.java b/src/android/net/dhcp/DhcpServer.java index beabd3e..cd993e9 100644 --- a/src/android/net/dhcp/DhcpServer.java +++ b/src/android/net/dhcp/DhcpServer.java @@ -28,6 +28,7 @@ import static android.net.shared.Inet4AddressUtils.getPrefixMaskAsInet4Address; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.IPPROTO_UDP; import static android.system.OsConstants.SOCK_DGRAM; +import static android.system.OsConstants.SOCK_NONBLOCK; import static android.system.OsConstants.SOL_SOCKET; import static android.system.OsConstants.SO_BROADCAST; import static android.system.OsConstants.SO_REUSEADDR; @@ -43,7 +44,6 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.net.INetworkStackStatusCallback; import android.net.MacAddress; -import android.net.NetworkUtils; import android.net.TrafficStats; import android.net.util.SharedLog; import android.net.util.SocketUtils; @@ -207,7 +207,7 @@ public class DhcpServer extends IDhcpServer.Stub { @Override public void addArpEntry(@NonNull Inet4Address ipv4Addr, @NonNull MacAddress ethAddr, @NonNull String ifname, @NonNull FileDescriptor fd) throws IOException { - NetworkUtils.addArpEntry(ipv4Addr, ethAddr, ifname, fd); + SocketUtils.addArpEntry(ipv4Addr, ethAddr, ifname, fd); } @Override @@ -630,7 +630,7 @@ public class DhcpServer extends IDhcpServer.Stub { // TODO: have and use an API to set a socket tag without going through the thread tag final int oldTag = TrafficStats.getAndSetThreadStatsTag(TAG_SYSTEM_DHCP_SERVER); try { - mSocket = Os.socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + mSocket = Os.socket(AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, IPPROTO_UDP); SocketUtils.bindSocketToInterface(mSocket, mIfName); Os.setsockoptInt(mSocket, SOL_SOCKET, SO_REUSEADDR, 1); Os.setsockoptInt(mSocket, SOL_SOCKET, SO_BROADCAST, 1); diff --git a/src/android/net/dhcp/DhcpServingParams.java b/src/android/net/dhcp/DhcpServingParams.java index 31ce95b..3cd2aa4 100644 --- a/src/android/net/dhcp/DhcpServingParams.java +++ b/src/android/net/dhcp/DhcpServingParams.java @@ -209,7 +209,7 @@ public class DhcpServingParams { * but it must always be set explicitly before building the {@link DhcpServingParams}. */ public Builder setDefaultRouters(@NonNull Inet4Address... defaultRouters) { - return setDefaultRouters(new ArraySet<>(Arrays.asList(defaultRouters))); + return setDefaultRouters(makeArraySet(defaultRouters)); } /** @@ -239,7 +239,7 @@ public class DhcpServingParams { * building the {@link DhcpServingParams}. */ public Builder setDnsServers(@NonNull Inet4Address... dnsServers) { - return setDnsServers(new ArraySet<>(Arrays.asList(dnsServers))); + return setDnsServers(makeArraySet(dnsServers)); } /** @@ -269,7 +269,7 @@ public class DhcpServingParams { * and do not need to be set here. */ public Builder setExcludedAddrs(@NonNull Inet4Address... excludedAddrs) { - return setExcludedAddrs(new ArraySet<>(Arrays.asList(excludedAddrs))); + return setExcludedAddrs(makeArraySet(excludedAddrs)); } /** @@ -368,4 +368,10 @@ public class DhcpServingParams { static IpPrefix makeIpPrefix(@NonNull LinkAddress addr) { return new IpPrefix(addr.getAddress(), addr.getPrefixLength()); } + + private static <T> ArraySet<T> makeArraySet(T[] elements) { + final ArraySet<T> set = new ArraySet<>(elements.length); + set.addAll(Arrays.asList(elements)); + return set; + } } diff --git a/src/android/net/ip/ConnectivityPacketTracker.java b/src/android/net/ip/ConnectivityPacketTracker.java index 385dd52..649257a 100644 --- a/src/android/net/ip/ConnectivityPacketTracker.java +++ b/src/android/net/ip/ConnectivityPacketTracker.java @@ -20,12 +20,13 @@ import static android.net.util.SocketUtils.makePacketSocketAddress; import static android.system.OsConstants.AF_PACKET; import static android.system.OsConstants.ARPHRD_ETHER; import static android.system.OsConstants.ETH_P_ALL; +import static android.system.OsConstants.SOCK_NONBLOCK; import static android.system.OsConstants.SOCK_RAW; -import android.net.NetworkUtils; import android.net.util.ConnectivityPacketSummary; import android.net.util.InterfaceParams; import android.net.util.PacketReader; +import android.net.util.SocketUtils; import android.os.Handler; import android.system.ErrnoException; import android.system.Os; @@ -33,7 +34,7 @@ import android.text.TextUtils; import android.util.LocalLog; import android.util.Log; -import libcore.util.HexEncoding; +import com.android.internal.util.HexDump; import java.io.FileDescriptor; import java.io.IOException; @@ -101,9 +102,10 @@ public class ConnectivityPacketTracker { protected FileDescriptor createFd() { FileDescriptor s = null; try { - s = Os.socket(AF_PACKET, SOCK_RAW, 0); - NetworkUtils.attachControlPacketFilter(s, ARPHRD_ETHER); - Os.bind(s, makePacketSocketAddress((short) ETH_P_ALL, mInterface.index)); + s = Os.socket(AF_PACKET, SOCK_RAW | SOCK_NONBLOCK, 0); + SocketUtils.attachControlPacketFilter(s, ARPHRD_ETHER); + SocketUtils.bindSocket( + s, makePacketSocketAddress((short) ETH_P_ALL, mInterface.index)); } catch (ErrnoException | IOException e) { logError("Failed to create packet tracking socket: ", e); closeFd(s); @@ -119,8 +121,7 @@ public class ConnectivityPacketTracker { if (summary == null) return; if (DBG) Log.d(mTag, summary); - addLogEntry(summary + - "\n[" + new String(HexEncoding.encode(recvbuf, 0, length)) + "]"); + addLogEntry(summary + "\n[" + HexDump.toHexString(recvbuf, 0, length) + "]"); } @Override diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java index 4315d34..12fe8c5 100644 --- a/src/android/net/ip/IpClient.java +++ b/src/android/net/ip/IpClient.java @@ -16,6 +16,7 @@ package android.net.ip; +import static android.net.RouteInfo.RTN_UNICAST; import static android.net.shared.IpConfigurationParcelableUtil.toStableParcelable; import static android.net.shared.LinkPropertiesParcelableUtil.fromStableParcelable; import static android.net.shared.LinkPropertiesParcelableUtil.toStableParcelable; @@ -36,7 +37,6 @@ import android.net.RouteInfo; import android.net.apf.ApfCapabilities; import android.net.apf.ApfFilter; import android.net.dhcp.DhcpClient; -import android.net.ip.IIpClientCallbacks; import android.net.metrics.IpConnectivityLog; import android.net.metrics.IpManagerEvent; import android.net.shared.InitialConfiguration; @@ -52,7 +52,6 @@ import android.util.LocalLog; import android.util.Log; import android.util.SparseArray; -import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IState; import com.android.internal.util.IndentingPrintWriter; @@ -992,7 +991,7 @@ public class IpClient extends StateMachine { // specified in the InitialConfiguration have been observed with Netlink. if (config.isProvisionedBy(newLp.getLinkAddresses(), null)) { for (IpPrefix prefix : config.directlyConnectedRoutes) { - newLp.addRoute(new RouteInfo(prefix, null, mInterfaceName)); + newLp.addRoute(new RouteInfo(prefix, null, mInterfaceName, RTN_UNICAST)); } } addAllReachableDnsServers(newLp, config.dnsServers); @@ -1093,7 +1092,7 @@ public class IpClient extends StateMachine { // If we have a StaticIpConfiguration attempt to apply it and // handle the result accordingly. if (mConfiguration.mStaticIpConfig != null) { - if (mInterfaceCtrl.setIPv4Address(mConfiguration.mStaticIpConfig.ipAddress)) { + if (mInterfaceCtrl.setIPv4Address(mConfiguration.mStaticIpConfig.getIpAddress())) { handleIPv4Success(new DhcpResults(mConfiguration.mStaticIpConfig)); } else { return false; @@ -1348,10 +1347,8 @@ public class IpClient extends StateMachine { apfConfig.apfCapabilities = mConfiguration.mApfCapabilities; apfConfig.multicastFilter = mMulticastFiltering; // Get the Configuration for ApfFilter from Context - apfConfig.ieee802_3Filter = - mContext.getResources().getBoolean(R.bool.config_apfDrop802_3Frames); - apfConfig.ethTypeBlackList = - mContext.getResources().getIntArray(R.array.config_apfEthTypeBlackList); + apfConfig.ieee802_3Filter = ApfCapabilities.getApfDrop8023Frames(mContext); + apfConfig.ethTypeBlackList = ApfCapabilities.getApfEthTypeBlackList(mContext); mApfFilter = ApfFilter.maybeCreate(mContext, apfConfig, mInterfaceParams, mCallback); // TODO: investigate the effects of any multicast filtering racing/interfering with the // rest of this IP configuration startup. diff --git a/src/android/net/ip/IpNeighborMonitor.java b/src/android/net/ip/IpNeighborMonitor.java index 2e6ff24..b29d617 100644 --- a/src/android/net/ip/IpNeighborMonitor.java +++ b/src/android/net/ip/IpNeighborMonitor.java @@ -20,6 +20,10 @@ import static android.net.netlink.NetlinkConstants.RTM_DELNEIGH; import static android.net.netlink.NetlinkConstants.hexify; import static android.net.netlink.NetlinkConstants.stringForNlMsgType; import static android.net.util.SocketUtils.makeNetlinkSocketAddress; +import static android.system.OsConstants.AF_NETLINK; +import static android.system.OsConstants.NETLINK_ROUTE; +import static android.system.OsConstants.SOCK_DGRAM; +import static android.system.OsConstants.SOCK_NONBLOCK; import android.net.MacAddress; import android.net.netlink.NetlinkErrorMessage; @@ -27,8 +31,10 @@ import android.net.netlink.NetlinkMessage; import android.net.netlink.NetlinkSocket; import android.net.netlink.RtNetlinkNeighborMessage; import android.net.netlink.StructNdMsg; +import android.net.util.NetworkStackUtils; import android.net.util.PacketReader; import android.net.util.SharedLog; +import android.net.util.SocketUtils; import android.os.Handler; import android.os.SystemClock; import android.system.ErrnoException; @@ -36,8 +42,6 @@ import android.system.Os; import android.system.OsConstants; import android.util.Log; -import libcore.io.IoUtils; - import java.io.FileDescriptor; import java.net.InetAddress; import java.net.SocketAddress; @@ -77,7 +81,7 @@ public class IpNeighborMonitor extends PacketReader { 1, ip, StructNdMsg.NUD_PROBE, ifIndex, null); try { - NetlinkSocket.sendOneShotKernelMessage(OsConstants.NETLINK_ROUTE, msg); + NetlinkSocket.sendOneShotKernelMessage(NETLINK_ROUTE, msg); } catch (ErrnoException e) { Log.e(TAG, "Error " + msgSnippet + ": " + e); return -e.errno; @@ -145,8 +149,8 @@ public class IpNeighborMonitor extends PacketReader { FileDescriptor fd = null; try { - fd = NetlinkSocket.forProto(OsConstants.NETLINK_ROUTE); - Os.bind(fd, makeNetlinkSocketAddress(0, OsConstants.RTMGRP_NEIGH)); + fd = Os.socket(AF_NETLINK, SOCK_DGRAM | SOCK_NONBLOCK, NETLINK_ROUTE); + SocketUtils.bindSocket(fd, makeNetlinkSocketAddress(0, OsConstants.RTMGRP_NEIGH)); NetlinkSocket.connectToKernel(fd); if (VDBG) { @@ -155,7 +159,7 @@ public class IpNeighborMonitor extends PacketReader { } } catch (ErrnoException|SocketException e) { logError("Failed to create rtnetlink socket", e); - IoUtils.closeQuietly(fd); + NetworkStackUtils.closeSocketQuietly(fd); return null; } diff --git a/src/android/net/util/NetworkStackUtils.java b/src/android/net/util/NetworkStackUtils.java index 6dcf0c0..98123a5 100644 --- a/src/android/net/util/NetworkStackUtils.java +++ b/src/android/net/util/NetworkStackUtils.java @@ -16,6 +16,9 @@ package android.net.util; +import java.io.FileDescriptor; +import java.io.IOException; + /** * Collection of utilities for the network stack. */ @@ -27,4 +30,14 @@ public class NetworkStackUtils { public static <T> boolean isEmpty(T[] array) { return array == null || array.length == 0; } + + /** + * Close a socket, ignoring any exception while closing. + */ + public static void closeSocketQuietly(FileDescriptor fd) { + try { + SocketUtils.closeSocket(fd); + } catch (IOException ignored) { + } + } } diff --git a/src/com/android/server/NetworkObserverRegistry.java b/src/com/android/server/NetworkObserverRegistry.java index 4f55779..6fb4b0d 100644 --- a/src/com/android/server/NetworkObserverRegistry.java +++ b/src/com/android/server/NetworkObserverRegistry.java @@ -15,6 +15,8 @@ */ package com.android.server; +import static android.net.RouteInfo.RTN_UNICAST; + import android.annotation.NonNull; import android.net.INetd; import android.net.INetdUnsolicitedEventListener; @@ -169,7 +171,7 @@ public class NetworkObserverRegistry extends INetdUnsolicitedEventListener.Stub public void onRouteChanged(boolean updated, String route, String gateway, String ifName) { final RouteInfo processRoute = new RouteInfo(new IpPrefix(route), ("".equals(gateway)) ? null : InetAddresses.parseNumericAddress(gateway), - ifName); + ifName, RTN_UNICAST); if (updated) { invokeForAllObservers(o -> o.onRouteUpdated(processRoute)); } else { diff --git a/src/com/android/server/NetworkStackService.java b/src/com/android/server/NetworkStackService.java index 7405c47..cedcb84 100644 --- a/src/com/android/server/NetworkStackService.java +++ b/src/com/android/server/NetworkStackService.java @@ -19,6 +19,7 @@ package com.android.server; import static android.net.dhcp.IDhcpServer.STATUS_INVALID_ARGUMENT; import static android.net.dhcp.IDhcpServer.STATUS_SUCCESS; import static android.net.dhcp.IDhcpServer.STATUS_UNKNOWN_ERROR; +import static android.net.shared.NetworkParcelableUtil.fromStableParcelable; import static com.android.server.util.PermissionUtil.checkDumpPermission; import static com.android.server.util.PermissionUtil.checkNetworkStackCallingPermission; @@ -34,7 +35,7 @@ import android.net.INetworkMonitor; import android.net.INetworkMonitorCallbacks; import android.net.INetworkStackConnector; import android.net.Network; -import android.net.NetworkRequest; +import android.net.NetworkParcelable; import android.net.PrivateDnsConfigParcel; import android.net.dhcp.DhcpServer; import android.net.dhcp.DhcpServingParams; @@ -150,13 +151,12 @@ public class NetworkStackService extends Service { } @Override - public void makeNetworkMonitor(int netId, String name, INetworkMonitorCallbacks cb) + public void makeNetworkMonitor( + NetworkParcelable network, String name, INetworkMonitorCallbacks cb) throws RemoteException { - final Network network = new Network(netId, false /* privateDnsBypass */); - final NetworkRequest defaultRequest = mCm.getDefaultRequest(); - final SharedLog log = addValidationLogs(network, name); - final NetworkMonitor nm = new NetworkMonitor( - mContext, cb, network, defaultRequest, log); + final Network parsedNetwork = fromStableParcelable(network); + final SharedLog log = addValidationLogs(parsedNetwork, name); + final NetworkMonitor nm = new NetworkMonitor(mContext, cb, parsedNetwork, log); cb.onNetworkMonitorCreated(new NetworkMonitorImpl(nm)); } diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java index 96eaa50..f21561f 100644 --- a/src/com/android/server/connectivity/NetworkMonitor.java +++ b/src/com/android/server/connectivity/NetworkMonitor.java @@ -47,7 +47,6 @@ import android.net.INetworkMonitorCallbacks; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; -import android.net.NetworkRequest; import android.net.ProxyInfo; import android.net.TrafficStats; import android.net.Uri; @@ -310,14 +309,14 @@ public class NetworkMonitor extends StateMachine { private long mLastProbeTime; public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, - NetworkRequest defaultRequest, SharedLog validationLog) { - this(context, cb, network, defaultRequest, new IpConnectivityLog(), validationLog, + SharedLog validationLog) { + this(context, cb, network, new IpConnectivityLog(), validationLog, Dependencies.DEFAULT); } @VisibleForTesting protected NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, - NetworkRequest defaultRequest, IpConnectivityLog logger, SharedLog validationLogs, + IpConnectivityLog logger, SharedLog validationLogs, Dependencies deps) { // Add suffix indicating which NetworkMonitor we're talking about. super(TAG + "/" + network.toString()); @@ -369,8 +368,7 @@ public class NetworkMonitor extends StateMachine { // we can ever fetch them. // TODO: Delete ASAP. mLinkProperties = new LinkProperties(); - mNetworkCapabilities = new NetworkCapabilities(); - mNetworkCapabilities.clearAll(); + mNetworkCapabilities = new NetworkCapabilities(null); } /** diff --git a/tests/src/android/net/util/PacketReaderTest.java b/tests/src/android/net/util/PacketReaderTest.java index dced743..6e11c40 100644 --- a/tests/src/android/net/util/PacketReaderTest.java +++ b/tests/src/android/net/util/PacketReaderTest.java @@ -17,7 +17,13 @@ package android.net.util; import static android.net.util.PacketReader.DEFAULT_RECV_BUF_SIZE; -import static android.system.OsConstants.*; +import static android.system.OsConstants.AF_INET6; +import static android.system.OsConstants.IPPROTO_UDP; +import static android.system.OsConstants.SOCK_DGRAM; +import static android.system.OsConstants.SOCK_NONBLOCK; +import static android.system.OsConstants.SOL_SOCKET; +import static android.system.OsConstants.SO_SNDTIMEO; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -31,10 +37,12 @@ import android.system.ErrnoException; import android.system.Os; import android.system.StructTimeval; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + import java.io.FileDescriptor; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.UncheckedIOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.Inet6Address; @@ -45,13 +53,6 @@ import java.util.Arrays; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import org.junit.runner.RunWith; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import libcore.io.IoBridge; - /** * Tests for PacketReader. * @@ -80,7 +81,7 @@ public class PacketReaderTest { protected FileDescriptor createFd() { FileDescriptor s = null; try { - s = Os.socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); + s = Os.socket(AF_INET6, SOCK_DGRAM | SOCK_NONBLOCK, IPPROTO_UDP); Os.bind(s, LOOPBACK6, 0); mLocalSockName = (InetSocketAddress) Os.getsockname(s); Os.setsockoptTimeval(s, SOL_SOCKET, SO_SNDTIMEO, TIMEO); diff --git a/tests/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/src/com/android/server/connectivity/NetworkMonitorTest.java index d31fa77..d11bb64 100644 --- a/tests/src/com/android/server/connectivity/NetworkMonitorTest.java +++ b/tests/src/com/android/server/connectivity/NetworkMonitorTest.java @@ -21,7 +21,6 @@ import static android.net.ConnectivityManager.EXTRA_CAPTIVE_PORTAL; import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_INVALID; import static android.net.INetworkMonitor.NETWORK_TEST_RESULT_VALID; import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; -import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; @@ -51,7 +50,6 @@ import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; -import android.net.NetworkRequest; import android.net.captiveportal.CaptivePortalProbeResult; import android.net.metrics.IpConnectivityLog; import android.net.util.SharedLog; @@ -103,7 +101,6 @@ public class NetworkMonitorTest { private @Mock NetworkMonitor.Dependencies mDependencies; private @Mock INetworkMonitorCallbacks mCallbacks; private @Spy Network mNetwork = new Network(TEST_NETID); - private NetworkRequest mRequest; private static final int TEST_NETID = 4242; @@ -178,10 +175,6 @@ public class NetworkMonitorTest { InetAddresses.parseNumericAddress("192.168.0.0") }).when(mNetwork).getAllByName(any()); - mRequest = new NetworkRequest.Builder() - .addCapability(NET_CAPABILITY_INTERNET) - .addCapability(NET_CAPABILITY_NOT_RESTRICTED) - .build(); // Default values. Individual tests can override these. when(mCm.getLinkProperties(any())).thenReturn(TEST_LINKPROPERTIES); when(mCm.getNetworkCapabilities(any())).thenReturn(METERED_CAPABILITIES); @@ -195,9 +188,9 @@ public class NetworkMonitorTest { private class WrappedNetworkMonitor extends NetworkMonitor { private long mProbeTime = 0; - WrappedNetworkMonitor(Context context, Network network, NetworkRequest defaultRequest, - IpConnectivityLog logger, Dependencies deps) { - super(context, mCallbacks, network, defaultRequest, logger, + WrappedNetworkMonitor(Context context, Network network, IpConnectivityLog logger, + Dependencies deps) { + super(context, mCallbacks, network, logger, new SharedLog("test_nm"), deps); } @@ -213,7 +206,7 @@ public class NetworkMonitorTest { private WrappedNetworkMonitor makeMeteredWrappedNetworkMonitor() { final WrappedNetworkMonitor nm = new WrappedNetworkMonitor( - mContext, mNetwork, mRequest, mLogger, mDependencies); + mContext, mNetwork, mLogger, mDependencies); when(mCm.getNetworkCapabilities(any())).thenReturn(METERED_CAPABILITIES); nm.start(); waitForIdle(nm.getHandler()); @@ -222,7 +215,7 @@ public class NetworkMonitorTest { private WrappedNetworkMonitor makeNotMeteredWrappedNetworkMonitor() { final WrappedNetworkMonitor nm = new WrappedNetworkMonitor( - mContext, mNetwork, mRequest, mLogger, mDependencies); + mContext, mNetwork, mLogger, mDependencies); when(mCm.getNetworkCapabilities(any())).thenReturn(NOT_METERED_CAPABILITIES); nm.start(); waitForIdle(nm.getHandler()); @@ -231,7 +224,7 @@ public class NetworkMonitorTest { private NetworkMonitor makeMonitor() { final NetworkMonitor nm = new NetworkMonitor( - mContext, mCallbacks, mNetwork, mRequest, mLogger, mValidationLogger, + mContext, mCallbacks, mNetwork, mLogger, mValidationLogger, mDependencies); nm.start(); waitForIdle(nm.getHandler()); |