Snap for 8981239 from 8da06cba7fdc2d2516545152def34ea4e5eb359b to mainline-tzdata4-release Change-Id: Ifed2e492b13db71de7763b8a177dc4ded3ce008a
diff --git a/Android.bp b/Android.bp index 6610ae6..aa0f42d 100644 --- a/Android.bp +++ b/Android.bp
@@ -153,6 +153,12 @@ srcs: [ "apishim/31/**/*.java", ], + static_libs: [ + // Libs building against module API can only be linked against when building against + // module API (so NetworkStackApi30Shims or NetworkStackApi29Shims can't use it, since they + // use system_30 and system_29 respectively). + "net-utils-framework-common", + ], libs: [ "NetworkStackShimsCommon", "NetworkStackApi29Shims", @@ -169,9 +175,6 @@ srcs: [ "apishim/33/**/*.java", ], - static_libs: [ - "net-utils-framework-common", - ], libs: [ "NetworkStackShimsCommon", "NetworkStackApi29Shims", @@ -189,15 +192,16 @@ // Shims for APIs being added to the current development version of Android. These APIs are not // stable and have no defined version number. These could be called 10000, but they use the next // integer so if the next SDK release happens to use that integer, we don't need to rename them. +// Jarjar rules are generated based on the stable shims, which do not contain this library. As a +// result, no static_lib that needs jarjar should be used here. In general, static_libs should not +// be used in this library at all; instead they can be in one of the earlier, shim libraries which +// are part of the stable shims and scanned when generating jarjar rules. java_library { name: "NetworkStackApi34Shims", defaults: ["NetworkStackShimsDefaults", "ConnectivityNextEnableDefaults"], srcs: [ "apishim/34/**/*.java", ], - static_libs: [ - "net-utils-framework-common", - ], libs: [ "NetworkStackShimsCommon", "NetworkStackApi29Shims", @@ -353,15 +357,31 @@ visibility: ["//packages/modules/Connectivity/tests/cts/net"], } -filegroup { +java_genrule { name: "NetworkStackJarJarRules", - srcs: ["jarjar-rules-shared.txt"], + tool_files: [ + // com.android.networkstack.apishim is already in the target package that is not jarjared, + // so it does not matter whether ApiStable or ApiCurrent is used to generate the jarjar + // rules. Use ApiStable to be based on most stable release configuration and be buildable + // in all branches. + ":NetworkStackApiStableLib{.jar}", + "jarjar-excludes.txt", + ], + tools: [ + "jarjar-rules-generator", + ], + out: ["NetworkStackJarJarRules.txt"], + cmd: "$(location jarjar-rules-generator) " + + "--jars $(location :NetworkStackApiStableLib{.jar}) " + + "--prefix com.android.networkstack " + + "--excludes $(location jarjar-excludes.txt) " + + "--output $(out)", visibility: [ "//packages/modules/NetworkStack/tests/unit", "//packages/modules/NetworkStack/tests/integration", "//packages/modules/Connectivity/tests:__subpackages__", "//packages/modules/Connectivity/Tethering/tests/integration", - ] + ], } // Common defaults for compiling the actual APK, based on the NetworkStackApiXBase android libraries
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d616750..9fe8b1d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml
@@ -58,14 +58,15 @@ The service is protected by NETWORK_SETTINGS permissions as there is no better networking-related permission that exists on Q, is sufficiently protected (signature), and can be obtained via shell permissions. --> - <service android:name="com.android.server.TestNetworkStackService" + <!-- (The name starting with a dot means the package prefix is the APK package name) --> + <service android:name=".TestNetworkStackService" android:permission="android.permission.NETWORK_SETTINGS" android:exported="true"> <intent-filter> <action android:name="android.net.INetworkStackConnector.Test"/> </intent-filter> </service> - <service android:name="com.android.server.connectivity.ipmemorystore.RegularMaintenanceJobService" + <service android:name=".ipmemorystore.RegularMaintenanceJobService" android:permission="android.permission.BIND_JOB_SERVICE" > </service> </application>
diff --git a/AndroidManifest_InProcess.xml b/AndroidManifest_InProcess.xml index 7934826..40d74a5 100644 --- a/AndroidManifest_InProcess.xml +++ b/AndroidManifest_InProcess.xml
@@ -33,7 +33,7 @@ <action android:name="android.net.INetworkStackConnector.InProcess"/> </intent-filter> </service> - <service android:name="com.android.server.connectivity.ipmemorystore.RegularMaintenanceJobService" + <service android:name="com.android.networkstack.ipmemorystore.RegularMaintenanceJobService" android:process="system" android:permission="android.permission.BIND_JOB_SERVICE" > </service>
diff --git a/TEST_MAPPING b/TEST_MAPPING index f7dc8f0..1d0f234 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING
@@ -16,9 +16,7 @@ // so in theory the infra would not need to reinstall/reboot devices to run both. { "name": "NetworkStackTests[CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk+com.google.android.resolv.apex+com.google.android.tethering.apex]" - } - ], - "mainline-postsubmit": [ + }, { "name": "NetworkStackIntegrationTests[CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk+com.google.android.resolv.apex+com.google.android.tethering.apex]" }
diff --git a/common/moduleutils/Android.bp b/common/moduleutils/Android.bp deleted file mode 100644 index 11b3d6d..0000000 --- a/common/moduleutils/Android.bp +++ /dev/null
@@ -1,44 +0,0 @@ -// -// Copyright (C) 2019 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. -// - -// Shared utility sources to be used by multiple network modules -// TODO: remove all frameworks/base dependencies on packages/modules/NetworkStack and -// frameworks/base/packages/Tethering by moving these files to frameworks/libs/net. -package { - default_applicable_licenses: ["Android-Apache-2.0"], -} - -filegroup { - name: "connectivity-module-utils-srcs", - srcs: [ - "src/android/net/shared/NetdUtils.java", - ], - visibility: [ - "//packages/modules/Connectivity/service", - ] -} - -// Shared utility sources to be used by tethering modules -filegroup { - name: "tethering-module-utils-srcs", - srcs: [ - "src/android/net/shared/NetdUtils.java", - ], - visibility: [ - "//frameworks/base/packages/Tethering", - "//packages/modules/Connectivity/Tethering" - ], -}
diff --git a/common/moduleutils/src/android/net/shared/LinkPropertiesParcelableUtil.java b/common/moduleutils/src/android/net/shared/LinkPropertiesParcelableUtil.java deleted file mode 100644 index 1729da6..0000000 --- a/common/moduleutils/src/android/net/shared/LinkPropertiesParcelableUtil.java +++ /dev/null
@@ -1,47 +0,0 @@ -/* - * Copyright (C) 2019 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 android.net.shared; - -import android.annotation.Nullable; -import android.net.LinkProperties; -import android.net.ProxyInfo; - -/** - * Collection of utility methods to convert to and from stable AIDL parcelables for LinkProperties - * and its attributes. - * @hide - */ -public final class LinkPropertiesParcelableUtil { - // Temporary methods to facilitate migrating clients away from LinkPropertiesParcelable - // TODO: remove the following methods after migrating clients. - - /** - * @deprecated conversion to stable parcelable is no longer necessary. - */ - @Deprecated - public static LinkProperties toStableParcelable(@Nullable LinkProperties lp) { - return lp; - } - - /** - * @deprecated conversion to stable parcelable is no longer necessary. - */ - @Deprecated - public static ProxyInfo toStableParcelable(@Nullable ProxyInfo info) { - return info; - } -}
diff --git a/common/moduleutils/src/android/net/shared/NetdUtils.java b/common/moduleutils/src/android/net/shared/NetdUtils.java deleted file mode 100644 index f801e16..0000000 --- a/common/moduleutils/src/android/net/shared/NetdUtils.java +++ /dev/null
@@ -1,79 +0,0 @@ -/* - * Copyright (C) 2019 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 android.net.shared; - -import static android.system.OsConstants.EBUSY; - -import android.net.INetd; -import android.net.TetherConfigParcel; -import android.os.RemoteException; -import android.os.ServiceSpecificException; -import android.os.SystemClock; -import android.util.Log; - -/** - * Implements common operations on INetd - * @hide - */ -public class NetdUtils { - private static final String TAG = NetdUtils.class.getSimpleName(); - - /** Start tethering. */ - public static void tetherStart(final INetd netd, final boolean usingLegacyDnsProxy, - final String[] dhcpRange) throws RemoteException, ServiceSpecificException { - final TetherConfigParcel config = new TetherConfigParcel(); - config.usingLegacyDnsProxy = usingLegacyDnsProxy; - config.dhcpRanges = dhcpRange; - netd.tetherStartWithConfiguration(config); - } - - /** - * Retry Netd#networkAddInterface for EBUSY error code. - * If the same interface (e.g., wlan0) is in client mode and then switches to tethered mode. - * There can be a race where puts the interface into the local network but interface is still - * in use in netd because the ConnectivityService thread hasn't processed the disconnect yet. - * See b/158269544 for detail. - */ - private static void networkAddInterface(final INetd netd, final String iface, - int maxAttempts, int pollingIntervalMs) - throws ServiceSpecificException, RemoteException { - for (int i = 1; i <= maxAttempts; i++) { - try { - netd.networkAddInterface(INetd.LOCAL_NET_ID, iface); - return; - } catch (ServiceSpecificException e) { - if (e.errorCode == EBUSY && i < maxAttempts) { - SystemClock.sleep(pollingIntervalMs); - continue; - } - - Log.e(TAG, "Retry Netd#networkAddInterface failure: " + e); - throw e; - } - } - } - - /** Reset interface for tethering. */ - public static void untetherInterface(final INetd netd, String iface) - throws RemoteException, ServiceSpecificException { - try { - netd.tetherInterfaceRemove(iface); - } finally { - netd.networkRemoveInterface(INetd.LOCAL_NET_ID, iface); - } - } -}
diff --git a/common/networkstackclient/src/android/net/shared/ProvisioningConfiguration.java b/common/networkstackclient/src/android/net/shared/ProvisioningConfiguration.java index 3bf6744..3a2a1bd 100644 --- a/common/networkstackclient/src/android/net/shared/ProvisioningConfiguration.java +++ b/common/networkstackclient/src/android/net/shared/ProvisioningConfiguration.java
@@ -333,7 +333,7 @@ @Override public int hashCode() { - return Objects.hash(mId, mPayload); + return Objects.hash(mId, Arrays.hashCode(mPayload)); } @Override
diff --git a/jarjar-excludes.txt b/jarjar-excludes.txt new file mode 100644 index 0000000..42a9219 --- /dev/null +++ b/jarjar-excludes.txt
@@ -0,0 +1,4 @@ +# Services referenced in the manifest. They could be moved to a different package as there are no +# hardcoded reference to them in AOSP, but it is possible that OEM customizations are relying on +# the naming. +com\.android\.server\.NetworkStackService(\$.+)?
diff --git a/jarjar-rules-shared.txt b/jarjar-rules-shared.txt deleted file mode 100644 index e8c9c19..0000000 --- a/jarjar-rules-shared.txt +++ /dev/null
@@ -1,16 +0,0 @@ -rule com.android.internal.util.** android.net.networkstack.util.@1 -rule com.google.protobuf.** com.android.networkstack.protobuf.@1 - -# Classes from net-utils-framework-common -rule com.android.net.module.util.** com.android.networkstack.util.@1 - -# Ignore DhcpResultsParcelable, but jarjar DhcpResults -# TODO: move DhcpResults into services.net and delete from here -rule android.net.DhcpResultsParcelable* @0 -rule android.net.DhcpResults* android.net.networkstack.DhcpResults@1 -rule android.util.LocalLog* android.net.networkstack.util.LocalLog@1 - -rule android.util.IndentingPrintWriter* android.net.networkstack.util.AndroidUtilIndentingPrintWriter@1 - -# Classes from modules-utils-build_system -rule com.android.modules.utils.build.** com.android.networkstack.utils.build.@1 \ No newline at end of file
diff --git a/jni/network_stack_utils_jni.cpp b/jni/network_stack_utils_jni.cpp index 63146d8..d7f6d78 100644 --- a/jni/network_stack_utils_jni.cpp +++ b/jni/network_stack_utils_jni.cpp
@@ -38,7 +38,8 @@ #include <android/log.h> namespace android { -constexpr const char NETWORKSTACKUTILS_PKG_NAME[] = "android/net/util/NetworkStackUtils"; +constexpr const char NETWORKSTACKUTILS_PKG_NAME[] = + "com/android/networkstack/util/NetworkStackUtils"; static const uint32_t kEtherTypeOffset = offsetof(ether_header, ether_type); static const uint32_t kEtherHeaderLen = sizeof(ether_header);
diff --git a/proguard.flags b/proguard.flags index 7f8f207..511a6b3 100644 --- a/proguard.flags +++ b/proguard.flags
@@ -1,14 +1,14 @@ --keepclassmembers class android.net.ip.IpClient { +-keepclassmembers class com.android.networkstack.android.net.ip.IpClient { static final int CMD_*; static final int EVENT_*; } --keepclassmembers class android.net.dhcp.DhcpClient { +-keepclassmembers class com.android.networkstack.android.net.dhcp.DhcpClient { static final int CMD_*; static final int EVENT_*; } --keepclassmembers public class * extends com.android.networkstack.util.Struct { +-keepclassmembers public class * extends com.android.networkstack.com.android.net.module.util.Struct { *; } @@ -17,4 +17,4 @@ # This replicates the base proguard rule used by the build by default # (proguard_basic_keeps.flags), but needs to be specified here because the # com.google.protobuf package is jarjared to the below package. --keepclassmembers class * extends com.android.networkstack.protobuf.MessageLite { <fields>; } +-keepclassmembers class * extends com.android.networkstack.com.google.protobuf.MessageLite { <fields>; }
diff --git a/src/android/net/NetworkStackIpMemoryStore.java b/src/android/net/NetworkStackIpMemoryStore.java index 850faaf..5426db0 100644 --- a/src/android/net/NetworkStackIpMemoryStore.java +++ b/src/android/net/NetworkStackIpMemoryStore.java
@@ -20,13 +20,15 @@ import androidx.annotation.NonNull; +import com.android.networkstack.ipmemorystore.IpMemoryStoreService; + import java.util.concurrent.ExecutionException; import java.util.function.Consumer; /** * service used to communicate with the ip memory store service in network stack, * which is running in the same module. - * @see com.android.server.connectivity.ipmemorystore.IpMemoryStoreService + * @see IpMemoryStoreService * @hide */ public class NetworkStackIpMemoryStore extends IpMemoryStoreClient {
diff --git a/src/android/net/apf/ApfFilter.java b/src/android/net/apf/ApfFilter.java index 4d98568..905aa9a 100644 --- a/src/android/net/apf/ApfFilter.java +++ b/src/android/net/apf/ApfFilter.java
@@ -49,7 +49,6 @@ import android.net.metrics.ApfStats; import android.net.metrics.IpConnectivityLog; import android.net.metrics.RaEvent; -import android.net.util.NetworkStackUtils; import android.os.PowerManager; import android.os.SystemClock; import android.system.ErrnoException; @@ -67,6 +66,7 @@ import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.ConnectivityUtils; import com.android.net.module.util.InterfaceParams; +import com.android.networkstack.util.NetworkStackUtils; import java.io.FileDescriptor; import java.io.IOException; @@ -191,7 +191,7 @@ // Thread to listen for RAs. @VisibleForTesting - class ReceiveThread extends Thread { + public class ReceiveThread extends Thread { private final byte[] mPacket = new byte[1514]; private final FileDescriptor mSocket; private final long mStart = SystemClock.elapsedRealtime(); @@ -348,9 +348,9 @@ private final IpConnectivityLog mMetricsLog; @VisibleForTesting - byte[] mHardwareAddress; + public byte[] mHardwareAddress; @VisibleForTesting - ReceiveThread mReceiveThread; + public ReceiveThread mReceiveThread; @GuardedBy("this") private long mUniqueCounter; @GuardedBy("this") @@ -386,7 +386,7 @@ private int mIPv4PrefixLength; @VisibleForTesting - ApfFilter(Context context, ApfConfiguration config, InterfaceParams ifParams, + public ApfFilter(Context context, ApfConfiguration config, InterfaceParams ifParams, IpClientCallbacksWrapper ipClientCallback, IpConnectivityLog log) { mApfCapabilities = config.apfCapabilities; mIpClientCallback = ipClientCallback; @@ -466,7 +466,7 @@ * filters to ignore useless RAs. */ @VisibleForTesting - void maybeStartFilter() { + public void maybeStartFilter() { FileDescriptor socket; try { mHardwareAddress = mInterfaceParams.macAddr.toByteArray(); @@ -546,7 +546,7 @@ // A class to hold information about an RA. @VisibleForTesting - class Ra { + public class Ra { // From RFC4861: private static final int ICMP6_RA_HEADER_LEN = 16; private static final int ICMP6_RA_CHECKSUM_OFFSET = @@ -771,7 +771,8 @@ // Buffer.position(int) or due to an invalid-length option) or IndexOutOfBoundsException // (from ByteBuffer.get(int) ) if parsing encounters something non-compliant with // specifications. - Ra(byte[] packet, int length) throws InvalidRaException { + @VisibleForTesting + public Ra(byte[] packet, int length) throws InvalidRaException { if (length < ICMP6_RA_OPTION_OFFSET) { throw new InvalidRaException("Not an ICMP6 router advertisement: too short"); } @@ -1619,7 +1620,7 @@ */ @GuardedBy("this") @VisibleForTesting - void installNewProgramLocked() { + public void installNewProgramLocked() { purgeExpiredRasLocked(); ArrayList<Ra> rasToFilter = new ArrayList<>(); final byte[] program; @@ -1730,7 +1731,7 @@ * @return a ProcessRaResult enum describing what action was performed. */ @VisibleForTesting - synchronized ProcessRaResult processRa(byte[] packet, int length) { + public synchronized ProcessRaResult processRa(byte[] packet, int length) { if (VDBG) hexDump("Read packet = ", packet, length); // Have we seen this RA before?
diff --git a/src/android/net/apf/ApfGenerator.java b/src/android/net/apf/ApfGenerator.java index bf4d910..db51186 100644 --- a/src/android/net/apf/ApfGenerator.java +++ b/src/android/net/apf/ApfGenerator.java
@@ -16,6 +16,8 @@ package android.net.apf; +import com.android.internal.annotations.VisibleForTesting; + import java.util.ArrayList; import java.util.HashMap; @@ -372,7 +374,8 @@ * {@code version} of the APF interpreter. Throws {@code IllegalInstructionException} if * the requested version is unsupported. */ - ApfGenerator(int version) throws IllegalInstructionException { + @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + public ApfGenerator(int version) throws IllegalInstructionException { mVersion = version; requireApfVersion(MIN_APF_VERSION); }
diff --git a/src/android/net/dhcp/DhcpClient.java b/src/android/net/dhcp/DhcpClient.java index 34c37a2..a540cef 100644 --- a/src/android/net/dhcp/DhcpClient.java +++ b/src/android/net/dhcp/DhcpClient.java
@@ -31,12 +31,6 @@ import static android.net.dhcp.DhcpPacket.INADDR_ANY; import static android.net.dhcp.DhcpPacket.INADDR_BROADCAST; import static android.net.dhcp.DhcpPacket.INFINITE_LEASE; -import static android.net.util.NetworkStackUtils.DHCP_INIT_REBOOT_VERSION; -import static android.net.util.NetworkStackUtils.DHCP_IPV6_ONLY_PREFERRED_VERSION; -import static android.net.util.NetworkStackUtils.DHCP_IP_CONFLICT_DETECT_VERSION; -import static android.net.util.NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION; -import static android.net.util.NetworkStackUtils.DHCP_SLOW_RETRANSMISSION_VERSION; -import static android.net.util.NetworkStackUtils.closeSocketQuietly; import static android.net.util.SocketUtils.makePacketSocketAddress; import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; import static android.system.OsConstants.AF_INET; @@ -57,6 +51,12 @@ import static com.android.net.module.util.NetworkStackConstants.IPV4_ADDR_ANY; import static com.android.net.module.util.NetworkStackConstants.IPV4_CONFLICT_ANNOUNCE_NUM; import static com.android.net.module.util.NetworkStackConstants.IPV4_CONFLICT_PROBE_NUM; +import static com.android.networkstack.util.NetworkStackUtils.DHCP_INIT_REBOOT_VERSION; +import static com.android.networkstack.util.NetworkStackUtils.DHCP_IPV6_ONLY_PREFERRED_VERSION; +import static com.android.networkstack.util.NetworkStackUtils.DHCP_IP_CONFLICT_DETECT_VERSION; +import static com.android.networkstack.util.NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION; +import static com.android.networkstack.util.NetworkStackUtils.DHCP_SLOW_RETRANSMISSION_VERSION; +import static com.android.networkstack.util.NetworkStackUtils.closeSocketQuietly; import android.content.Context; import android.net.DhcpResults; @@ -74,7 +74,6 @@ import android.net.metrics.IpConnectivityLog; import android.net.networkstack.aidl.dhcp.DhcpOption; import android.net.util.HostnameTransliterator; -import android.net.util.NetworkStackUtils; import android.net.util.SocketUtils; import android.os.Build; import android.os.Handler; @@ -108,6 +107,7 @@ import com.android.networkstack.apishim.common.ShimUtils; import com.android.networkstack.arp.ArpPacket; import com.android.networkstack.metrics.IpProvisioningMetrics; +import com.android.networkstack.util.NetworkStackUtils; import java.io.ByteArrayOutputStream; import java.io.FileDescriptor;
diff --git a/src/android/net/dhcp/DhcpLease.java b/src/android/net/dhcp/DhcpLease.java index 0b9cd7c..d440c42 100644 --- a/src/android/net/dhcp/DhcpLease.java +++ b/src/android/net/dhcp/DhcpLease.java
@@ -142,7 +142,8 @@ @Override public int hashCode() { - return Objects.hash(mClientId, mHwAddr, mNetAddr, mPrefixLength, mHostname, mExpTime); + return Objects.hash(Arrays.hashCode(mClientId), mHwAddr, mNetAddr, mPrefixLength, + mHostname, mExpTime); } static String clientIdToString(byte[] bytes) {
diff --git a/src/android/net/dhcp/DhcpServer.java b/src/android/net/dhcp/DhcpServer.java index c700453..3325e74 100644 --- a/src/android/net/dhcp/DhcpServer.java +++ b/src/android/net/dhcp/DhcpServer.java
@@ -23,7 +23,6 @@ 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.util.NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION; import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.IPPROTO_UDP; @@ -39,6 +38,7 @@ import static com.android.net.module.util.NetworkStackConstants.IPV4_ADDR_ALL; import static com.android.net.module.util.NetworkStackConstants.IPV4_ADDR_ANY; import static com.android.net.module.util.NetworkStackConstants.TAG_SYSTEM_DHCP_SERVER; +import static com.android.networkstack.util.NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION; import static com.android.server.util.PermissionUtil.enforceNetworkStackCallingPermission; import static java.lang.Integer.toUnsignedLong; @@ -48,7 +48,6 @@ import android.net.IpPrefix; import android.net.MacAddress; import android.net.TrafficStats; -import android.net.util.NetworkStackUtils; import android.net.util.SocketUtils; import android.os.Handler; import android.os.Message; @@ -68,6 +67,7 @@ import com.android.internal.util.StateMachine; import com.android.net.module.util.DeviceConfigUtils; import com.android.net.module.util.SharedLog; +import com.android.networkstack.util.NetworkStackUtils; import java.io.FileDescriptor; import java.io.IOException;
diff --git a/src/android/net/ip/ConnectivityPacketTracker.java b/src/android/net/ip/ConnectivityPacketTracker.java index a905315..4b92179 100644 --- a/src/android/net/ip/ConnectivityPacketTracker.java +++ b/src/android/net/ip/ConnectivityPacketTracker.java
@@ -24,7 +24,6 @@ import static android.system.OsConstants.SOCK_RAW; import android.net.util.ConnectivityPacketSummary; -import android.net.util.NetworkStackUtils; import android.os.Handler; import android.os.SystemClock; import android.system.ErrnoException; @@ -37,6 +36,7 @@ import com.android.internal.util.TokenBucket; import com.android.net.module.util.InterfaceParams; import com.android.net.module.util.PacketReader; +import com.android.networkstack.util.NetworkStackUtils; import java.io.FileDescriptor; import java.io.IOException;
diff --git a/src/android/net/ip/IpClient.java b/src/android/net/ip/IpClient.java index ea45851..97c6990 100644 --- a/src/android/net/ip/IpClient.java +++ b/src/android/net/ip/IpClient.java
@@ -23,9 +23,6 @@ import static android.net.ip.IIpClient.PROV_IPV6_LINKLOCAL; import static android.net.ip.IpReachabilityMonitor.INVALID_REACHABILITY_LOSS_TYPE; import static android.net.ip.IpReachabilityMonitor.nudEventTypeToInt; -import static android.net.util.NetworkStackUtils.IPCLIENT_DISABLE_ACCEPT_RA_VERSION; -import static android.net.util.NetworkStackUtils.IPCLIENT_GARP_NA_ROAMING_VERSION; -import static android.net.util.NetworkStackUtils.IPCLIENT_GRATUITOUS_NA_VERSION; import static android.net.util.SocketUtils.makePacketSocketAddress; import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; import static android.system.OsConstants.AF_PACKET; @@ -38,6 +35,9 @@ import static com.android.net.module.util.NetworkStackConstants.ETHER_BROADCAST; import static com.android.net.module.util.NetworkStackConstants.IPV6_ADDR_ALL_ROUTERS_MULTICAST; import static com.android.net.module.util.NetworkStackConstants.VENDOR_SPECIFIC_IE_ID; +import static com.android.networkstack.util.NetworkStackUtils.IPCLIENT_DISABLE_ACCEPT_RA_VERSION; +import static com.android.networkstack.util.NetworkStackUtils.IPCLIENT_GARP_NA_ROAMING_VERSION; +import static com.android.networkstack.util.NetworkStackUtils.IPCLIENT_GRATUITOUS_NA_VERSION; import static com.android.server.util.PermissionUtil.enforceNetworkStackCallingPermission; import android.annotation.SuppressLint; @@ -73,7 +73,6 @@ import android.net.shared.ProvisioningConfiguration; import android.net.shared.ProvisioningConfiguration.ScanResultInfo; import android.net.shared.ProvisioningConfiguration.ScanResultInfo.InformationElement; -import android.net.util.NetworkStackUtils; import android.os.Build; import android.os.ConditionVariable; import android.os.Handler; @@ -117,6 +116,7 @@ import com.android.networkstack.metrics.IpProvisioningMetrics; import com.android.networkstack.metrics.NetworkQuirkMetrics; import com.android.networkstack.packets.NeighborAdvertisement; +import com.android.networkstack.util.NetworkStackUtils; import com.android.server.NetworkObserverRegistry; import com.android.server.NetworkStackService.NetworkStackServiceManager; @@ -507,18 +507,17 @@ // Specific vendor OUI(3 bytes)/vendor specific type(1 byte) pattern for upstream hotspot // device detection. Add new byte array pattern below in turn. - private static final List<byte[]> METERED_IE_PATTERN_LIST = Collections.unmodifiableList( - Arrays.asList( - new byte[] { (byte) 0x00, (byte) 0x17, (byte) 0xf2, (byte) 0x06 } - )); + private static final List<byte[]> METERED_IE_PATTERN_LIST = Collections.singletonList( + new byte[] { (byte) 0x00, (byte) 0x17, (byte) 0xf2, (byte) 0x06 } + ); // Allows Wi-Fi to pass in DHCP options when particular vendor-specific IEs are present. // Maps each DHCP option code to a list of IEs, any of which will allow that option. private static final Map<Byte, List<byte[]>> DHCP_OPTIONS_ALLOWED = Map.of( - (byte) 60, Arrays.asList( + (byte) 60, Collections.singletonList( // KT OUI: 00:17:C3, type: 17. See b/170928882. new byte[]{ (byte) 0x00, (byte) 0x17, (byte) 0xc3, (byte) 0x11 }), - (byte) 77, Arrays.asList( + (byte) 77, Collections.singletonList( // KT OUI: 00:17:C3, type: 17. See b/170928882. new byte[]{ (byte) 0x00, (byte) 0x17, (byte) 0xc3, (byte) 0x11 }) ); @@ -697,7 +696,7 @@ } @VisibleForTesting - IpClient(Context context, String ifName, IIpClientCallbacks callback, + public IpClient(Context context, String ifName, IIpClientCallbacks callback, NetworkObserverRegistry observerRegistry, NetworkStackServiceManager nssManager, Dependencies deps) { super(IpClient.class.getSimpleName() + "." + ifName);
diff --git a/src/android/net/ip/IpClientLinkObserver.java b/src/android/net/ip/IpClientLinkObserver.java index 56c5293..08226ef 100644 --- a/src/android/net/ip/IpClientLinkObserver.java +++ b/src/android/net/ip/IpClientLinkObserver.java
@@ -16,7 +16,6 @@ package android.net.ip; -import static android.net.util.NetworkStackUtils.IPCLIENT_PARSE_NETLINK_EVENTS_VERSION; import static android.system.OsConstants.AF_INET6; import static android.system.OsConstants.AF_UNSPEC; import static android.system.OsConstants.IFF_LOOPBACK; @@ -29,6 +28,7 @@ import static com.android.net.module.util.netlink.NetlinkConstants.RTPROT_KERNEL; import static com.android.net.module.util.netlink.NetlinkConstants.RTPROT_RA; import static com.android.net.module.util.netlink.NetlinkConstants.RT_SCOPE_UNIVERSE; +import static com.android.networkstack.util.NetworkStackUtils.IPCLIENT_PARSE_NETLINK_EVENTS_VERSION; import android.app.AlarmManager; import android.content.Context;
diff --git a/src/android/net/ip/IpReachabilityMonitor.java b/src/android/net/ip/IpReachabilityMonitor.java index 82eb074..00f6dfa 100644 --- a/src/android/net/ip/IpReachabilityMonitor.java +++ b/src/android/net/ip/IpReachabilityMonitor.java
@@ -20,9 +20,10 @@ import static android.net.metrics.IpReachabilityEvent.NUD_FAILED_ORGANIC; import static android.net.metrics.IpReachabilityEvent.PROVISIONING_LOST; import static android.net.metrics.IpReachabilityEvent.PROVISIONING_LOST_ORGANIC; -import static android.net.util.NetworkStackUtils.IP_REACHABILITY_MCAST_RESOLICIT_VERSION; import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; +import static com.android.networkstack.util.NetworkStackUtils.IP_REACHABILITY_MCAST_RESOLICIT_VERSION; + import android.content.Context; import android.net.ConnectivityManager; import android.net.INetd; @@ -175,7 +176,8 @@ * Encapsulates IpReachabilityMonitor dependencies on systems that hinder unit testing. * TODO: consider also wrapping MultinetworkPolicyTracker in this interface. */ - interface Dependencies { + @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) + public interface Dependencies { void acquireWakeLock(long durationMs); IpNeighborMonitor makeIpNeighborMonitor(Handler h, SharedLog log, NeighborEventConsumer cb); boolean isFeatureEnabled(Context context, String name, boolean defaultEnabled); @@ -239,9 +241,9 @@ } @VisibleForTesting - IpReachabilityMonitor(Context context, InterfaceParams ifParams, Handler h, SharedLog log, - Callback callback, boolean usingMultinetworkPolicyTracker, Dependencies dependencies, - final IpConnectivityLog metricsLog, final INetd netd) { + public IpReachabilityMonitor(Context context, InterfaceParams ifParams, Handler h, + SharedLog log, Callback callback, boolean usingMultinetworkPolicyTracker, + Dependencies dependencies, final IpConnectivityLog metricsLog, final INetd netd) { if (ifParams == null) throw new IllegalArgumentException("null InterfaceParams"); mContext = context;
diff --git a/src/com/android/server/TestNetworkStackService.java b/src/com/android/networkstack/TestNetworkStackService.java similarity index 93% rename from src/com/android/server/TestNetworkStackService.java rename to src/com/android/networkstack/TestNetworkStackService.java index 23981e5..f34300d 100644 --- a/src/com/android/server/TestNetworkStackService.java +++ b/src/com/android/networkstack/TestNetworkStackService.java
@@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server; +package com.android.networkstack; import static com.android.server.util.PermissionUtil.isDebuggableBuild; @@ -23,6 +23,8 @@ import androidx.annotation.Nullable; +import com.android.server.NetworkStackService; + /** * A {@link NetworkStackService} that can only be bound to on debuggable builds. */
diff --git a/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreDatabase.java b/src/com/android/networkstack/ipmemorystore/IpMemoryStoreDatabase.java similarity index 99% rename from src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreDatabase.java rename to src/com/android/networkstack/ipmemorystore/IpMemoryStoreDatabase.java index f9b6365..8242783 100644 --- a/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreDatabase.java +++ b/src/com/android/networkstack/ipmemorystore/IpMemoryStoreDatabase.java
@@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; import static com.android.net.module.util.Inet4AddressUtils.inet4AddressToIntHTH; import static com.android.net.module.util.Inet4AddressUtils.intToInet4AddressHTH;
diff --git a/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreService.java b/src/com/android/networkstack/ipmemorystore/IpMemoryStoreService.java similarity index 98% rename from src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreService.java rename to src/com/android/networkstack/ipmemorystore/IpMemoryStoreService.java index ae9c875..aa7d698 100644 --- a/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreService.java +++ b/src/com/android/networkstack/ipmemorystore/IpMemoryStoreService.java
@@ -14,15 +14,15 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; import static android.net.ipmemorystore.Status.ERROR_DATABASE_CANNOT_BE_OPENED; import static android.net.ipmemorystore.Status.ERROR_GENERIC; import static android.net.ipmemorystore.Status.ERROR_ILLEGAL_ARGUMENT; import static android.net.ipmemorystore.Status.SUCCESS; -import static com.android.server.connectivity.ipmemorystore.IpMemoryStoreDatabase.EXPIRY_ERROR; -import static com.android.server.connectivity.ipmemorystore.RegularMaintenanceJobService.InterruptMaintenance; +import static com.android.networkstack.ipmemorystore.IpMemoryStoreDatabase.EXPIRY_ERROR; +import static com.android.networkstack.ipmemorystore.RegularMaintenanceJobService.InterruptMaintenance; import android.content.Context; import android.database.SQLException;
diff --git a/src/com/android/server/connectivity/ipmemorystore/RegularMaintenanceJobService.java b/src/com/android/networkstack/ipmemorystore/RegularMaintenanceJobService.java similarity index 98% rename from src/com/android/server/connectivity/ipmemorystore/RegularMaintenanceJobService.java rename to src/com/android/networkstack/ipmemorystore/RegularMaintenanceJobService.java index c8559c8..bc6213c 100644 --- a/src/com/android/server/connectivity/ipmemorystore/RegularMaintenanceJobService.java +++ b/src/com/android/networkstack/ipmemorystore/RegularMaintenanceJobService.java
@@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; import android.app.job.JobInfo; import android.app.job.JobParameters;
diff --git a/src/com/android/server/connectivity/ipmemorystore/RelevanceUtils.java b/src/com/android/networkstack/ipmemorystore/RelevanceUtils.java similarity index 99% rename from src/com/android/server/connectivity/ipmemorystore/RelevanceUtils.java rename to src/com/android/networkstack/ipmemorystore/RelevanceUtils.java index 38d5544..6a0c398 100644 --- a/src/com/android/server/connectivity/ipmemorystore/RelevanceUtils.java +++ b/src/com/android/networkstack/ipmemorystore/RelevanceUtils.java
@@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; import com.android.internal.annotations.VisibleForTesting;
diff --git a/src/com/android/server/connectivity/ipmemorystore/StatusAndCount.java b/src/com/android/networkstack/ipmemorystore/StatusAndCount.java similarity index 93% rename from src/com/android/server/connectivity/ipmemorystore/StatusAndCount.java rename to src/com/android/networkstack/ipmemorystore/StatusAndCount.java index 2cbe843..a6abdba 100644 --- a/src/com/android/server/connectivity/ipmemorystore/StatusAndCount.java +++ b/src/com/android/networkstack/ipmemorystore/StatusAndCount.java
@@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; /** * Small data class to wrap a Status and an int.
diff --git a/src/com/android/server/connectivity/ipmemorystore/Utils.java b/src/com/android/networkstack/ipmemorystore/Utils.java similarity index 96% rename from src/com/android/server/connectivity/ipmemorystore/Utils.java rename to src/com/android/networkstack/ipmemorystore/Utils.java index d8a46ed..c2fb1a4 100644 --- a/src/com/android/server/connectivity/ipmemorystore/Utils.java +++ b/src/com/android/networkstack/ipmemorystore/Utils.java
@@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; import android.net.ipmemorystore.Blob;
diff --git a/src/com/android/networkstack/metrics/DataStallDetectionStats.java b/src/com/android/networkstack/metrics/DataStallDetectionStats.java index 751d98d..e13d2d4 100644 --- a/src/com/android/networkstack/metrics/DataStallDetectionStats.java +++ b/src/com/android/networkstack/metrics/DataStallDetectionStats.java
@@ -157,8 +157,9 @@ @Override public int hashCode() { - return Objects.hash(mNetworkType, mEvaluationType, mWifiInfo, mCellularInfo, mDns, - mTcpFailRate, mTcpSentSinceLastRecv); + return Objects.hash(mNetworkType, mEvaluationType, Arrays.hashCode(mWifiInfo), + Arrays.hashCode(mCellularInfo), Arrays.hashCode(mDns), mTcpFailRate, + mTcpSentSinceLastRecv); } /**
diff --git a/src/com/android/networkstack/netlink/TcpSocketTracker.java b/src/com/android/networkstack/netlink/TcpSocketTracker.java index 99d2c13..ec130e6 100644 --- a/src/com/android/networkstack/netlink/TcpSocketTracker.java +++ b/src/com/android/networkstack/netlink/TcpSocketTracker.java
@@ -43,7 +43,6 @@ import android.net.INetd; import android.net.MarkMaskParcel; import android.net.Network; -import android.net.util.NetworkStackUtils; import android.net.util.SocketUtils; import android.os.AsyncTask; import android.os.Build; @@ -70,6 +69,7 @@ import com.android.networkstack.apishim.NetworkShimImpl; import com.android.networkstack.apishim.common.ShimUtils; import com.android.networkstack.apishim.common.UnsupportedApiLevelException; +import com.android.networkstack.util.NetworkStackUtils; import java.io.FileDescriptor; import java.io.InterruptedIOException;
diff --git a/src/android/net/util/NetworkStackUtils.java b/src/com/android/networkstack/util/NetworkStackUtils.java similarity index 98% rename from src/android/net/util/NetworkStackUtils.java rename to src/com/android/networkstack/util/NetworkStackUtils.java index 1730b9d..2ec6841 100755 --- a/src/android/net/util/NetworkStackUtils.java +++ b/src/com/android/networkstack/util/NetworkStackUtils.java
@@ -14,10 +14,11 @@ * limitations under the License. */ -package android.net.util; +package com.android.networkstack.util; import android.content.Context; import android.net.MacAddress; +import android.net.util.SocketUtils; import android.system.ErrnoException; import androidx.annotation.NonNull;
diff --git a/src/com/android/server/NetworkStackService.java b/src/com/android/server/NetworkStackService.java index 1e09f45..368a6d4 100644 --- a/src/com/android/server/NetworkStackService.java +++ b/src/com/android/server/NetworkStackService.java
@@ -63,8 +63,8 @@ import com.android.networkstack.NetworkStackNotifier; import com.android.networkstack.R; import com.android.networkstack.apishim.common.ShimUtils; +import com.android.networkstack.ipmemorystore.IpMemoryStoreService; import com.android.server.connectivity.NetworkMonitor; -import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService; import com.android.server.util.PermissionUtil; import java.io.FileDescriptor; @@ -421,8 +421,8 @@ if (cb != null) cb.onStatusAvailable(0); } - @Override - protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout, + @Override @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) + public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout, @Nullable String[] args) { checkDumpPermission();
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java index 84081b5..d98c5e4 100755 --- a/src/com/android/server/connectivity/NetworkMonitor.java +++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -55,24 +55,6 @@ import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_VALID_DNS_TIME_THRESHOLD_MS; import static android.net.util.DataStallUtils.DEFAULT_DNS_LOG_SIZE; import static android.net.util.DataStallUtils.DEFAULT_TCP_POLLING_INTERVAL_MS; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_FALLBACK_PROBE_SPECS; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_FALLBACK_URL; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_HTTPS_URL; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_HTTP_URL; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_MODE; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_MODE_IGNORE; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_MODE_PROMPT; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_HTTPS_URLS; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_HTTP_URLS; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_USER_AGENT; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_USE_HTTPS; -import static android.net.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_DNS_PROBE_TIMEOUT; -import static android.net.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_FALLBACK_PROBE_SPECS; -import static android.net.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_HTTPS_URLS; -import static android.net.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_HTTP_URLS; -import static android.net.util.NetworkStackUtils.DISMISS_PORTAL_IN_VALIDATED_NETWORK; -import static android.net.util.NetworkStackUtils.DNS_PROBE_PRIVATE_IP_NO_INTERNET_VERSION; import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; import static com.android.net.module.util.CollectionUtils.isEmpty; @@ -87,6 +69,24 @@ import static com.android.networkstack.apishim.ConstantsShim.TRANSPORT_TEST; import static com.android.networkstack.util.DnsUtils.PRIVATE_DNS_PROBE_HOST_SUFFIX; import static com.android.networkstack.util.DnsUtils.TYPE_ADDRCONFIG; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_FALLBACK_PROBE_SPECS; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_FALLBACK_URL; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_HTTPS_URL; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_HTTP_URL; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_MODE; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_MODE_IGNORE; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_MODE_PROMPT; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_HTTPS_URLS; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_HTTP_URLS; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_USER_AGENT; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_USE_HTTPS; +import static com.android.networkstack.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_DNS_PROBE_TIMEOUT; +import static com.android.networkstack.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_FALLBACK_PROBE_SPECS; +import static com.android.networkstack.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_HTTPS_URLS; +import static com.android.networkstack.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_HTTP_URLS; +import static com.android.networkstack.util.NetworkStackUtils.DISMISS_PORTAL_IN_VALIDATED_NETWORK; +import static com.android.networkstack.util.NetworkStackUtils.DNS_PROBE_PRIVATE_IP_NO_INTERNET_VERSION; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -116,7 +116,6 @@ import android.net.networkstack.aidl.NetworkMonitorParameters; import android.net.shared.PrivateDnsConfig; import android.net.util.DataStallUtils.EvaluationType; -import android.net.util.NetworkStackUtils; import android.net.util.Stopwatch; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; @@ -177,6 +176,7 @@ import com.android.networkstack.metrics.NetworkValidationMetrics; import com.android.networkstack.netlink.TcpSocketTracker; import com.android.networkstack.util.DnsUtils; +import com.android.networkstack.util.NetworkStackUtils; import com.android.server.NetworkStackService.NetworkStackServiceManager; import org.json.JSONException;
diff --git a/tests/integration/Android.bp b/tests/integration/Android.bp index 2bf0529..f21cf33 100644 --- a/tests/integration/Android.bp +++ b/tests/integration/Android.bp
@@ -78,6 +78,7 @@ min_sdk_version: "29", target_sdk_version: "30", jarjar_rules: ":NetworkStackJarJarRules", + test_config_template: "AndroidTestTemplate_Integration.xml", } // Network stack next integration tests. @@ -99,6 +100,7 @@ platform_apis: true, test_suites: ["device-tests"], jarjar_rules: ":NetworkStackJarJarRules", + test_config_template: "AndroidTestTemplate_Integration.xml", } // Network stack integration root tests.
diff --git a/tests/integration/AndroidTestTemplate_Integration.xml b/tests/integration/AndroidTestTemplate_Integration.xml new file mode 100644 index 0000000..7ea8ad6 --- /dev/null +++ b/tests/integration/AndroidTestTemplate_Integration.xml
@@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2022 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. +--> +<configuration description="Test config for {MODULE}"> + <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller"> + <option name="cleanup-apks" value="true" /> + <option name="test-file-name" value="{MODULE}.apk" /> + </target_preparer> + + <!-- Needed to push to the app's data directory. Without root, there appears to be no directory + that the shell can write to and that the networkstack can read from. --> + <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/> + + <test class="com.android.tradefed.testtype.AndroidJUnitTest" > + <option name="package" value="com.android.server.networkstack.integrationtests" /> + <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> + <!-- By default, include and exclude filters go into /data/local/tmp/ajur/, which these + tests cannot access because they run in the network_stack selinux context. Move + them to the tests' data directory instead. + + This avoids confusing module errors in presubmit when a test fails, the test infra + attempts to retry it, but the retry run results in the test process crashing with a + permission denial trying to read the exclude file. --> + <option name="test-filter-dir" value="/data/data/{PACKAGE}/cache" /> + <option name="hidden-api-checks" value="false"/> + </test> +</configuration>
diff --git a/tests/integration/AndroidTest_Coverage.xml b/tests/integration/AndroidTest_Coverage.xml index 3e7361b..1c63a93 100644 --- a/tests/integration/AndroidTest_Coverage.xml +++ b/tests/integration/AndroidTest_Coverage.xml
@@ -22,6 +22,14 @@ <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.server.networkstack.coverage" /> <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> + <!-- By default, include and exclude filters go into /data/local/tmp/ajur/, which these + tests cannot access because they run in the network_stack selinux context. Move + them to the tests' data directory instead. + + This avoids confusing module errors in presubmit when a test fails, the test infra + attempts to retry it, but the retry run results in the test process crashing with a + permission denial trying to read the exclude file. --> + <option name="test-filter-dir" value="/data/data/{PACKAGE}/cache" /> <option name="hidden-api-checks" value="false"/> <option name="device-listeners" value="com.android.modules.utils.testing.NativeCoverageHackInstrumentationListener" /> </test>
diff --git a/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java b/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java index ff99bc8..1a4dab1 100644 --- a/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java +++ b/tests/integration/common/android/net/ip/IpClientIntegrationTestCommon.java
@@ -144,7 +144,6 @@ import android.net.shared.Layer2Information; import android.net.shared.ProvisioningConfiguration; import android.net.shared.ProvisioningConfiguration.ScanResultInfo; -import android.net.util.NetworkStackUtils; import android.os.Build; import android.os.Handler; import android.os.HandlerThread; @@ -180,15 +179,16 @@ import com.android.networkstack.apishim.ConstantsShim; import com.android.networkstack.apishim.common.ShimUtils; import com.android.networkstack.arp.ArpPacket; +import com.android.networkstack.ipmemorystore.IpMemoryStoreService; import com.android.networkstack.metrics.IpProvisioningMetrics; import com.android.networkstack.metrics.IpReachabilityMonitorMetrics; import com.android.networkstack.metrics.NetworkQuirkMetrics; import com.android.networkstack.packets.NeighborAdvertisement; import com.android.networkstack.packets.NeighborSolicitation; +import com.android.networkstack.util.NetworkStackUtils; import com.android.server.NetworkObserver; import com.android.server.NetworkObserverRegistry; import com.android.server.NetworkStackService.NetworkStackServiceManager; -import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService; import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter; import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo; @@ -3174,10 +3174,15 @@ } final int after = getNumOpenFds(); - // Check that the number of open fds is the same as before. - // If this exact match becomes flaky, we could add some tolerance here (e.g., allow 2-3 - // extra fds), since it's likely that any leak would at least leak one FD per loop. - assertEquals("Fd leak after " + iterations + " iterations: ", before, after); + // Check that the number of open fds is the same as before, within some tolerance (e.g., + // garbage collection or other cleanups might have caused an fd to be closed). This + // shouldn't make leak detection much less reliable, since it's likely that any leak would + // at least leak one FD per loop. + final int tolerance = 4; + assertTrue( + "FD leak detected after " + iterations + " iterations: expected " + + before + " +/- " + tolerance + " fds, found " + after, + Math.abs(after - before) <= tolerance); } // TODO: delete when DhcpOption is @JavaOnlyImmutable.
diff --git a/tests/integration/signature/android/net/util/NetworkStackUtilsIntegrationTest.kt b/tests/integration/signature/android/net/util/NetworkStackUtilsIntegrationTest.kt index 2dd984d..17153de 100644 --- a/tests/integration/signature/android/net/util/NetworkStackUtilsIntegrationTest.kt +++ b/tests/integration/signature/android/net/util/NetworkStackUtilsIntegrationTest.kt
@@ -33,17 +33,18 @@ import android.system.OsConstants.IPPROTO_UDP import android.system.OsConstants.SOCK_DGRAM import android.system.OsConstants.SOCK_NONBLOCK -import androidx.test.platform.app.InstrumentationRegistry import android.system.OsConstants.SOCK_RAW import android.system.OsConstants.SOL_SOCKET import android.system.OsConstants.SO_RCVTIMEO import android.system.StructTimeval +import androidx.test.platform.app.InstrumentationRegistry import com.android.net.module.util.InterfaceParams import com.android.net.module.util.Ipv6Utils import com.android.net.module.util.NetworkStackConstants.ETHER_ADDR_LEN import com.android.net.module.util.NetworkStackConstants.IPV4_ADDR_ANY import com.android.net.module.util.NetworkStackConstants.IPV6_ADDR_ALL_NODES_MULTICAST import com.android.net.module.util.structs.PrefixInformationOption +import com.android.networkstack.util.NetworkStackUtils import com.android.testutils.ArpRequestFilter import com.android.testutils.ETHER_HEADER_LENGTH import com.android.testutils.IPV4_HEADER_LENGTH @@ -56,9 +57,9 @@ import org.junit.Test import java.io.FileDescriptor import java.net.Inet4Address -import kotlin.reflect.KClass import java.net.Inet6Address import java.nio.ByteBuffer +import kotlin.reflect.KClass import kotlin.test.assertEquals import kotlin.test.assertTrue import kotlin.test.fail
diff --git a/tests/unit/src/android/net/apf/ApfTest.java b/tests/unit/src/android/net/apf/ApfTest.java index 6532f95..bf3b87d 100644 --- a/tests/unit/src/android/net/apf/ApfTest.java +++ b/tests/unit/src/android/net/apf/ApfTest.java
@@ -984,7 +984,7 @@ } @Override - void maybeStartFilter() { + public void maybeStartFilter() { mHardwareAddress = MOCK_MAC_ADDR; installNewProgramLocked();
diff --git a/tests/unit/src/android/net/dhcp/DhcpServerTest.java b/tests/unit/src/android/net/dhcp/DhcpServerTest.java index 345c341..6d4bc13 100644 --- a/tests/unit/src/android/net/dhcp/DhcpServerTest.java +++ b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
@@ -23,9 +23,9 @@ import static android.net.dhcp.DhcpPacket.INADDR_BROADCAST; import static android.net.dhcp.DhcpServer.CMD_RECEIVE_PACKET; import static android.net.dhcp.IDhcpServer.STATUS_SUCCESS; -import static android.net.util.NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION; import static com.android.net.module.util.Inet4AddressUtils.inet4AddressToIntHTH; +import static com.android.networkstack.util.NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse;
diff --git a/tests/unit/src/android/net/ip/IpClientTest.java b/tests/unit/src/android/net/ip/IpClientTest.java index b88317a..8efa9ab 100644 --- a/tests/unit/src/android/net/ip/IpClientTest.java +++ b/tests/unit/src/android/net/ip/IpClientTest.java
@@ -16,9 +16,10 @@ package android.net.ip; -import static android.net.util.NetworkStackUtils.IPCLIENT_PARSE_NETLINK_EVENTS_VERSION; import static android.system.OsConstants.RT_SCOPE_UNIVERSE; +import static com.android.networkstack.util.NetworkStackUtils.IPCLIENT_PARSE_NETLINK_EVENTS_VERSION; + import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -69,10 +70,10 @@ import com.android.net.module.util.InterfaceParams; import com.android.networkstack.R; +import com.android.networkstack.ipmemorystore.IpMemoryStoreService; import com.android.server.NetworkObserver; import com.android.server.NetworkObserverRegistry; import com.android.server.NetworkStackService; -import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService; import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter; import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
diff --git a/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt b/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt index a8c5c97..10b55d5 100644 --- a/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt +++ b/tests/unit/src/android/net/ip/IpReachabilityMonitorTest.kt
@@ -24,7 +24,7 @@ import android.net.LinkProperties import android.net.RouteInfo import android.net.metrics.IpConnectivityLog -import android.net.util.NetworkStackUtils.IP_REACHABILITY_MCAST_RESOLICIT_VERSION +import com.android.networkstack.util.NetworkStackUtils.IP_REACHABILITY_MCAST_RESOLICIT_VERSION import android.os.Handler import android.os.HandlerThread import android.os.MessageQueue @@ -54,7 +54,6 @@ import com.android.net.module.util.InterfaceParams import com.android.net.module.util.SharedLog import com.android.net.module.util.ip.IpNeighborMonitor -import com.android.net.module.util.ip.IpNeighborMonitor.NeighborEventConsumer import com.android.net.module.util.netlink.StructNdMsg.NUD_FAILED import com.android.net.module.util.netlink.StructNdMsg.NUD_REACHABLE import com.android.net.module.util.netlink.StructNdMsg.NUD_STALE
diff --git a/tests/unit/src/com/android/server/NetworkStackServiceTest.kt b/tests/unit/src/com/android/networkstack/NetworkStackServiceTest.kt similarity index 98% rename from tests/unit/src/com/android/server/NetworkStackServiceTest.kt rename to tests/unit/src/com/android/networkstack/NetworkStackServiceTest.kt index 40abe9e..4c4864b 100644 --- a/tests/unit/src/com/android/server/NetworkStackServiceTest.kt +++ b/tests/unit/src/com/android/networkstack/NetworkStackServiceTest.kt
@@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server +package com.android.networkstack import android.content.Context import android.net.IIpMemoryStoreCallbacks @@ -40,7 +40,7 @@ import com.android.server.NetworkStackService.NetworkStackConnector import com.android.server.NetworkStackService.PermissionChecker import com.android.server.connectivity.NetworkMonitor -import com.android.server.connectivity.ipmemorystore.IpMemoryStoreService +import com.android.networkstack.ipmemorystore.IpMemoryStoreService import com.android.testutils.DevSdkIgnoreRule import com.android.testutils.DevSdkIgnoreRule.IgnoreAfter import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
diff --git a/tests/unit/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreServiceTest.java b/tests/unit/src/com/android/networkstack/ipmemorystore/IpMemoryStoreServiceTest.java similarity index 99% rename from tests/unit/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreServiceTest.java rename to tests/unit/src/com/android/networkstack/ipmemorystore/IpMemoryStoreServiceTest.java index 73edcc7..976389e 100644 --- a/tests/unit/src/com/android/server/connectivity/ipmemorystore/IpMemoryStoreServiceTest.java +++ b/tests/unit/src/com/android/networkstack/ipmemorystore/IpMemoryStoreServiceTest.java
@@ -14,9 +14,9 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; -import static com.android.server.connectivity.ipmemorystore.RegularMaintenanceJobService.InterruptMaintenance; +import static com.android.networkstack.ipmemorystore.RegularMaintenanceJobService.InterruptMaintenance; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse;
diff --git a/tests/unit/src/com/android/server/connectivity/ipmemorystore/RelevanceUtilsTests.java b/tests/unit/src/com/android/networkstack/ipmemorystore/RelevanceUtilsTests.java similarity index 97% rename from tests/unit/src/com/android/server/connectivity/ipmemorystore/RelevanceUtilsTests.java rename to tests/unit/src/com/android/networkstack/ipmemorystore/RelevanceUtilsTests.java index 3d3aabc..86f111d 100644 --- a/tests/unit/src/com/android/server/connectivity/ipmemorystore/RelevanceUtilsTests.java +++ b/tests/unit/src/com/android/networkstack/ipmemorystore/RelevanceUtilsTests.java
@@ -14,9 +14,9 @@ * limitations under the License. */ -package com.android.server.connectivity.ipmemorystore; +package com.android.networkstack.ipmemorystore; -import static com.android.server.connectivity.ipmemorystore.RelevanceUtils.CAPPED_RELEVANCE; +import static com.android.networkstack.ipmemorystore.RelevanceUtils.CAPPED_RELEVANCE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;
diff --git a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java index bf8a6e5..6cc4bfb 100644 --- a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java +++ b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
@@ -47,12 +47,6 @@ import static android.net.util.DataStallUtils.DATA_STALL_EVALUATION_TYPE_DNS; import static android.net.util.DataStallUtils.DATA_STALL_EVALUATION_TYPE_TCP; import static android.net.util.DataStallUtils.DEFAULT_DATA_STALL_EVALUATION_TYPES; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_FALLBACK_PROBE_SPECS; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS; -import static android.net.util.NetworkStackUtils.CAPTIVE_PORTAL_USE_HTTPS; -import static android.net.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_DNS_PROBE_TIMEOUT; -import static android.net.util.NetworkStackUtils.DISMISS_PORTAL_IN_VALIDATED_NETWORK; -import static android.net.util.NetworkStackUtils.DNS_PROBE_PRIVATE_IP_NO_INTERNET_VERSION; import static android.os.Build.VERSION_CODES.S_V2; import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY; @@ -60,6 +54,12 @@ import static com.android.net.module.util.NetworkStackConstants.TEST_CAPTIVE_PORTAL_HTTP_URL; import static com.android.net.module.util.NetworkStackConstants.TEST_URL_EXPIRATION_TIME; import static com.android.networkstack.util.DnsUtils.PRIVATE_DNS_PROBE_HOST_SUFFIX; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_FALLBACK_PROBE_SPECS; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_OTHER_FALLBACK_URLS; +import static com.android.networkstack.util.NetworkStackUtils.CAPTIVE_PORTAL_USE_HTTPS; +import static com.android.networkstack.util.NetworkStackUtils.DEFAULT_CAPTIVE_PORTAL_DNS_PROBE_TIMEOUT; +import static com.android.networkstack.util.NetworkStackUtils.DISMISS_PORTAL_IN_VALIDATED_NETWORK; +import static com.android.networkstack.util.NetworkStackUtils.DNS_PROBE_PRIVATE_IP_NO_INTERNET_VERSION; import static com.android.server.connectivity.NetworkMonitor.INITIAL_REEVALUATE_DELAY_MS; import static com.android.server.connectivity.NetworkMonitor.extractCharset;