From f4882153ed8b1f53150cedbd460051d4d65b217e Mon Sep 17 00:00:00 2001 From: Ayush Sharma Date: Thu, 16 Dec 2021 14:40:13 +0000 Subject: [PATCH 1/3] Revert "Add CTS tests for exclude VPN routes APIs" Revert "Add APIs that allow to exclude routes from VPN" Revert "Suppress NewApi warnings for @SystemApi -> public APIs" Revert "Add VpnServiceBuilderShim for VpnService.Builder" Revert submission 1551943-vpn-impl Reason for revert: , bug b/210979001 Reverted Changes: I0e7aa077a:Add VpnServiceBuilderShim for VpnService.Builder Ib12f5ab39:Suppress NewApi warnings for @SystemApi -> public ... I59b9185cf:Unhide RouteInfo#getType and related fields Ie5b62b2b2:Unhide IpPrefix(InetAddress, int) I993a32d40:Add CTS tests for exclude VPN routes APIs Ib24b2d3fb:Suppress NewApi warnings for @SystemApi -> public ... Ic3b10464a:Add APIs that allow to exclude routes from VPN Change-Id: Ic4f86f405c395f1356de1a6f8cf9e92692d953ce BUG: 210979001 --- tests/cts/hostside/Android.bp | 3 - tests/cts/hostside/app/Android.bp | 33 +--- .../cts/net/hostside/MyVpnService.java | 91 ++++------- .../com/android/cts/net/hostside/VpnTest.java | 154 ++---------------- .../cts/net/HostsideNetworkTestCase.java | 8 +- .../com/android/cts/net/HostsideVpnTests.java | 12 -- 6 files changed, 54 insertions(+), 247 deletions(-) diff --git a/tests/cts/hostside/Android.bp b/tests/cts/hostside/Android.bp index b68406871b..f72a458414 100644 --- a/tests/cts/hostside/Android.bp +++ b/tests/cts/hostside/Android.bp @@ -25,9 +25,6 @@ java_test_host { "cts-tradefed", "tradefed", ], - static_libs: [ - "modules-utils-build-testing", - ], // Tag this module as a cts test artifact test_suites: [ "cts", diff --git a/tests/cts/hostside/app/Android.bp b/tests/cts/hostside/app/Android.bp index 8597bfffdf..674af14c41 100644 --- a/tests/cts/hostside/app/Android.bp +++ b/tests/cts/hostside/app/Android.bp @@ -18,8 +18,12 @@ package { default_applicable_licenses: ["Android-Apache-2.0"], } -java_defaults { - name: "CtsHostsideNetworkTestsAppDefaults", +android_test_helper_app { + name: "CtsHostsideNetworkTestsApp", + defaults: [ + "cts_support_defaults", + "framework-connectivity-test-defaults", + ], platform_apis: true, static_libs: [ "CtsHostsideNetworkTestsAidl", @@ -43,28 +47,3 @@ java_defaults { "general-tests", ], } - -android_test_helper_app { - name: "CtsHostsideNetworkTestsApp", - defaults: [ - "cts_support_defaults", - "framework-connectivity-test-defaults", - "CtsHostsideNetworkTestsAppDefaults", - ], - static_libs: [ - "NetworkStackApiStableShims", - ], -} - -android_test_helper_app { - name: "CtsHostsideNetworkTestsAppNext", - defaults: [ - "cts_support_defaults", - "framework-connectivity-test-defaults", - "CtsHostsideNetworkTestsAppDefaults", - "ConnectivityNextEnableDefaults", - ], - static_libs: [ - "NetworkStackApiCurrentShims", - ], -} diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java index 7adc71a2f2..7d3d4fce74 100644 --- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java +++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/MyVpnService.java @@ -17,27 +17,18 @@ package com.android.cts.net.hostside; import android.content.Intent; -import android.content.pm.PackageManager.NameNotFoundException; -import android.net.IpPrefix; import android.net.Network; -import android.net.NetworkUtils; import android.net.ProxyInfo; import android.net.VpnService; import android.os.ParcelFileDescriptor; +import android.content.pm.PackageManager.NameNotFoundException; import android.text.TextUtils; import android.util.Log; -import android.util.Pair; - -import com.android.modules.utils.build.SdkLevel; -import com.android.networkstack.apishim.VpnServiceBuilderShimImpl; -import com.android.networkstack.apishim.common.UnsupportedApiLevelException; -import com.android.networkstack.apishim.common.VpnServiceBuilderShim; import java.io.IOException; import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.ArrayList; -import java.util.function.BiConsumer; -import java.util.function.Consumer; public class MyVpnService extends VpnService { @@ -64,62 +55,39 @@ public class MyVpnService extends VpnService { return START_NOT_STICKY; } - private String parseIpAndMaskListArgument(String packageName, Intent intent, String argName, - BiConsumer consumer) { - final String addresses = intent.getStringExtra(packageName + "." + argName); - - if (TextUtils.isEmpty(addresses)) { - return null; - } - - final String[] addressesArray = addresses.split(","); - for (String address : addressesArray) { - final Pair ipAndMask = NetworkUtils.parseIpAndMask(address); - consumer.accept(ipAndMask.first, ipAndMask.second); - } - - return addresses; - } - - private String parseIpPrefixListArgument(String packageName, Intent intent, String argName, - Consumer consumer) { - return parseIpAndMaskListArgument(packageName, intent, argName, - (inetAddress, prefixLength) -> consumer.accept( - new IpPrefix(inetAddress, prefixLength))); - } - private void start(String packageName, Intent intent) { Builder builder = new Builder(); - VpnServiceBuilderShim vpnServiceBuilderShim = VpnServiceBuilderShimImpl.newInstance(); - final String addresses = parseIpAndMaskListArgument(packageName, intent, "addresses", - builder::addAddress); - - String addedRoutes; - if (SdkLevel.isAtLeastT() && intent.getBooleanExtra(packageName + ".addRoutesByIpPrefix", - false)) { - addedRoutes = parseIpPrefixListArgument(packageName, intent, "routes", (prefix) -> { + String addresses = intent.getStringExtra(packageName + ".addresses"); + if (addresses != null) { + String[] addressArray = addresses.split(","); + for (int i = 0; i < addressArray.length; i++) { + String[] prefixAndMask = addressArray[i].split("/"); try { - vpnServiceBuilderShim.addRoute(builder, prefix); - } catch (UnsupportedApiLevelException e) { - throw new RuntimeException(e); + InetAddress address = InetAddress.getByName(prefixAndMask[0]); + int prefixLength = Integer.parseInt(prefixAndMask[1]); + builder.addAddress(address, prefixLength); + } catch (UnknownHostException|NumberFormatException| + ArrayIndexOutOfBoundsException e) { + continue; } - }); - } else { - addedRoutes = parseIpAndMaskListArgument(packageName, intent, "routes", - builder::addRoute); + } } - String excludedRoutes = null; - if (SdkLevel.isAtLeastT()) { - excludedRoutes = parseIpPrefixListArgument(packageName, intent, "excludedRoutes", - (prefix) -> { - try { - vpnServiceBuilderShim.excludeRoute(builder, prefix); - } catch (UnsupportedApiLevelException e) { - throw new RuntimeException(e); - } - }); + String routes = intent.getStringExtra(packageName + ".routes"); + if (routes != null) { + String[] routeArray = routes.split(","); + for (int i = 0; i < routeArray.length; i++) { + String[] prefixAndMask = routeArray[i].split("/"); + try { + InetAddress address = InetAddress.getByName(prefixAndMask[0]); + int prefixLength = Integer.parseInt(prefixAndMask[1]); + builder.addRoute(address, prefixLength); + } catch (UnknownHostException|NumberFormatException| + ArrayIndexOutOfBoundsException e) { + continue; + } + } } String allowed = intent.getStringExtra(packageName + ".allowedapplications"); @@ -172,8 +140,7 @@ public class MyVpnService extends VpnService { Log.i(TAG, "Establishing VPN," + " addresses=" + addresses - + " addedRoutes=" + addedRoutes - + " excludedRoutes=" + excludedRoutes + + " routes=" + routes + " allowedApplications=" + allowed + " disallowedApplications=" + disallowed); diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java index 1841200714..3abc4fb0e3 100755 --- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java +++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/VpnTest.java @@ -268,32 +268,9 @@ public class VpnTest { // TODO: Consider replacing arguments with a Builder. private void startVpn( - String[] addresses, String[] routes, String allowedApplications, - String disallowedApplications, @Nullable ProxyInfo proxyInfo, - @Nullable ArrayList underlyingNetworks, boolean isAlwaysMetered) - throws Exception { - startVpn(addresses, routes, new String[0] /* excludedRoutes */, allowedApplications, - disallowedApplications, proxyInfo, underlyingNetworks, isAlwaysMetered); - } - - private void startVpn( - String[] addresses, String[] routes, String[] excludedRoutes, - String allowedApplications, String disallowedApplications, - @Nullable ProxyInfo proxyInfo, - @Nullable ArrayList underlyingNetworks, boolean isAlwaysMetered) - throws Exception { - startVpn(addresses, routes, new String[0] /* excludedRoutes */, allowedApplications, - disallowedApplications, proxyInfo, underlyingNetworks, isAlwaysMetered, - false /* addRoutesByIpPrefix */); - } - - private void startVpn( - String[] addresses, String[] routes, String[] excludedRoutes, - String allowedApplications, String disallowedApplications, - @Nullable ProxyInfo proxyInfo, - @Nullable ArrayList underlyingNetworks, boolean isAlwaysMetered, - boolean addRoutesByIpPrefix) - throws Exception { + String[] addresses, String[] routes, String allowedApplications, + String disallowedApplications, @Nullable ProxyInfo proxyInfo, + @Nullable ArrayList underlyingNetworks, boolean isAlwaysMetered) throws Exception { prepareVpn(); // Register a callback so we will be notified when our VPN comes up. @@ -318,14 +295,12 @@ public class VpnTest { .putExtra(mPackageName + ".cmd", "connect") .putExtra(mPackageName + ".addresses", TextUtils.join(",", addresses)) .putExtra(mPackageName + ".routes", TextUtils.join(",", routes)) - .putExtra(mPackageName + ".excludedRoutes", TextUtils.join(",", excludedRoutes)) .putExtra(mPackageName + ".allowedapplications", allowedApplications) .putExtra(mPackageName + ".disallowedapplications", disallowedApplications) .putExtra(mPackageName + ".httpProxy", proxyInfo) .putParcelableArrayListExtra( mPackageName + ".underlyingNetworks", underlyingNetworks) - .putExtra(mPackageName + ".isAlwaysMetered", isAlwaysMetered) - .putExtra(mPackageName + ".addRoutesByIpPrefix", addRoutesByIpPrefix); + .putExtra(mPackageName + ".isAlwaysMetered", isAlwaysMetered); mActivity.startService(intent); synchronized (mLock) { @@ -547,12 +522,6 @@ public class VpnTest { } private void checkUdpEcho(String to, String expectedFrom) throws IOException { - checkUdpEcho(to, expectedFrom, expectedFrom != null); - } - - private void checkUdpEcho(String to, String expectedFrom, - boolean expectConnectionOwnerIsVisible) - throws IOException { DatagramSocket s; InetAddress address = InetAddress.getByName(to); if (address instanceof Inet6Address) { // http://b/18094870 @@ -576,7 +545,7 @@ public class VpnTest { try { if (expectedFrom != null) { s.send(p); - checkConnectionOwnerUidUdp(s, expectConnectionOwnerIsVisible); + checkConnectionOwnerUidUdp(s, true); s.receive(p); MoreAsserts.assertEquals(data, p.getData()); } else { @@ -585,7 +554,7 @@ public class VpnTest { s.receive(p); fail("Received unexpected reply"); } catch (IOException expected) { - checkConnectionOwnerUidUdp(s, expectConnectionOwnerIsVisible); + checkConnectionOwnerUidUdp(s, false); } } } finally { @@ -593,38 +562,19 @@ public class VpnTest { } } - private void checkTrafficOnVpn(String destination) throws Exception { - final InetAddress address = InetAddress.getByName(destination); - - if (address instanceof Inet6Address) { - checkUdpEcho(destination, "2001:db8:1:2::ffe"); - checkTcpReflection(destination, "2001:db8:1:2::ffe"); - checkPing(destination); - } else { - checkUdpEcho(destination, "192.0.2.2"); - checkTcpReflection(destination, "192.0.2.2"); - } - - } - - private void checkNoTrafficOnVpn(String destination) throws IOException { - checkUdpEcho(destination, null); - checkTcpReflection(destination, null); - } - private void checkTrafficOnVpn() throws Exception { - checkTrafficOnVpn("192.0.2.251"); - checkTrafficOnVpn("2001:db8:dead:beef::f00"); + checkUdpEcho("192.0.2.251", "192.0.2.2"); + checkUdpEcho("2001:db8:dead:beef::f00", "2001:db8:1:2::ffe"); + checkPing("2001:db8:dead:beef::f00"); + checkTcpReflection("192.0.2.252", "192.0.2.2"); + checkTcpReflection("2001:db8:dead:beef::f00", "2001:db8:1:2::ffe"); } private void checkNoTrafficOnVpn() throws Exception { - checkNoTrafficOnVpn("192.0.2.251"); - checkNoTrafficOnVpn("2001:db8:dead:beef::f00"); - } - - private void checkTrafficBypassesVpn(String destination) throws Exception { - checkUdpEcho(destination, null, true /* expectVpnOwnedConnection */); - checkTcpReflection(destination, null); + checkUdpEcho("192.0.2.251", null); + checkUdpEcho("2001:db8:dead:beef::f00", null); + checkTcpReflection("192.0.2.252", null); + checkTcpReflection("2001:db8:dead:beef::f00", null); } private FileDescriptor openSocketFd(String host, int port, int timeoutMs) throws Exception { @@ -908,9 +858,9 @@ public class VpnTest { } Log.i(TAG, "Append shell app to disallowedApps: " + disallowedApps); startVpn(new String[] {"192.0.2.2/32", "2001:db8:1:2::ffe/128"}, - new String[] {"192.0.2.0/24", "2001:db8::/32"}, - "", disallowedApps, null, null /* underlyingNetworks */, - false /* isAlwaysMetered */); + new String[] {"192.0.2.0/24", "2001:db8::/32"}, + "", disallowedApps, null, null /* underlyingNetworks */, + false /* isAlwaysMetered */); assertSocketStillOpen(localFd, TEST_HOST); assertSocketStillOpen(remoteFd, TEST_HOST); @@ -922,74 +872,6 @@ public class VpnTest { assertFalse(nc.hasTransport(TRANSPORT_VPN)); } - @Test - public void testExcludedRoutes() throws Exception { - if (!supportedHardware()) return; - if (!SdkLevel.isAtLeastT()) return; - - // Shell app must not be put in here or it would kill the ADB-over-network use case - String allowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName; - startVpn(new String[]{"192.0.2.2/32", "2001:db8:1:2::ffe/128"} /* addresses */, - new String[]{"0.0.0.0/0", "::/0"} /* routes */, - new String[]{"192.0.2.0/24", "2001:db8::/32"} /* excludedRoutes */, - allowedApps, "" /* disallowedApplications */, null /* proxyInfo */, - null /* underlyingNetworks */, false /* isAlwaysMetered */); - - // Excluded routes should bypass VPN. - checkTrafficBypassesVpn("192.0.2.1"); - checkTrafficBypassesVpn("2001:db8:dead:beef::f00"); - // Other routes should go through VPN, since default routes are included. - checkTrafficOnVpn("198.51.100.1"); - checkTrafficOnVpn("2002:db8::1"); - } - - @Test - public void testIncludedRoutes() throws Exception { - if (!supportedHardware()) return; - - // Shell app must not be put in here or it would kill the ADB-over-network use case - String allowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName; - startVpn(new String[]{"192.0.2.2/32", "2001:db8:1:2::ffe/128"} /* addresses */, - new String[]{"192.0.2.0/24", "2001:db8::/32"} /* routes */, - allowedApps, "" /* disallowedApplications */, null /* proxyInfo */, - null /* underlyingNetworks */, false /* isAlwaysMetered */); - - // Included routes should go through VPN. - checkTrafficOnVpn("192.0.2.1"); - checkTrafficOnVpn("2001:db8:dead:beef::f00"); - // Other routes should bypass VPN, since default routes are not included. - checkTrafficBypassesVpn("198.51.100.1"); - checkTrafficBypassesVpn("2002:db8::1"); - } - - @Test - public void testInterleavedRoutes() throws Exception { - if (!supportedHardware()) return; - if (!SdkLevel.isAtLeastT()) return; - - // Shell app must not be put in here or it would kill the ADB-over-network use case - String allowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName; - startVpn(new String[]{"192.0.2.2/32", "2001:db8:1:2::ffe/128"} /* addresses */, - new String[]{"0.0.0.0/0", "192.0.2.0/32", "::/0", "2001:db8::/128"} /* routes */, - new String[]{"192.0.2.0/24", "2001:db8::/32"} /* excludedRoutes */, - allowedApps, "" /* disallowedApplications */, null /* proxyInfo */, - null /* underlyingNetworks */, false /* isAlwaysMetered */, - true /* addRoutesByIpPrefix */); - - // Excluded routes should bypass VPN. - checkTrafficBypassesVpn("192.0.2.1"); - checkTrafficBypassesVpn("2001:db8:dead:beef::f00"); - - // Included routes inside excluded routes should go through VPN, since the longest common - // prefix precedes. - checkTrafficOnVpn("192.0.2.0"); - checkTrafficOnVpn("2001:db8::"); - - // Other routes should go through VPN, since default routes are included. - checkTrafficOnVpn("198.51.100.1"); - checkTrafficOnVpn("2002:db8::1"); - } - @Test public void testGetConnectionOwnerUidSecurity() throws Exception { if (!supportedHardware()) return; diff --git a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java index cc07fd1089..89c79d3677 100644 --- a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java +++ b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java @@ -20,7 +20,6 @@ import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper; import com.android.ddmlib.Log; import com.android.ddmlib.testrunner.RemoteAndroidTestRunner; import com.android.ddmlib.testrunner.TestResult.TestStatus; -import com.android.modules.utils.build.testing.DeviceSdkLevel; import com.android.tradefed.build.IBuildInfo; import com.android.tradefed.device.DeviceNotAvailableException; import com.android.tradefed.result.CollectingTestListener; @@ -43,7 +42,6 @@ abstract class HostsideNetworkTestCase extends DeviceTestCase implements IAbiRec protected static final String TAG = "HostsideNetworkTests"; protected static final String TEST_PKG = "com.android.cts.net.hostside"; protected static final String TEST_APK = "CtsHostsideNetworkTestsApp.apk"; - protected static final String TEST_APK_NEXT = "CtsHostsideNetworkTestsAppNext.apk"; protected static final String TEST_APP2_PKG = "com.android.cts.net.hostside.app2"; protected static final String TEST_APP2_APK = "CtsHostsideNetworkTestsApp2.apk"; @@ -67,12 +65,8 @@ abstract class HostsideNetworkTestCase extends DeviceTestCase implements IAbiRec assertNotNull(mAbi); assertNotNull(mCtsBuild); - DeviceSdkLevel deviceSdkLevel = new DeviceSdkLevel(getDevice()); - String testApk = deviceSdkLevel.isDeviceAtLeastT() ? TEST_APK_NEXT - : TEST_APK; - uninstallPackage(TEST_PKG, false); - installPackage(testApk); + installPackage(TEST_APK); } @Override diff --git a/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java b/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java index 24840d2daa..49b5f9dc96 100644 --- a/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java +++ b/tests/cts/hostside/src/com/android/cts/net/HostsideVpnTests.java @@ -100,16 +100,4 @@ public class HostsideVpnTests extends HostsideNetworkTestCase { runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testDownloadWithDownloadManagerDisallowed"); } - - public void testExcludedRoutes() throws Exception { - runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testExcludedRoutes"); - } - - public void testIncludedRoutes() throws Exception { - runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testIncludedRoutes"); - } - - public void testInterleavedRoutes() throws Exception { - runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testInterleavedRoutes"); - } } From 758ead6dd362f8b7c665603fb9d85038b3f72f27 Mon Sep 17 00:00:00 2001 From: Ayush Sharma Date: Thu, 16 Dec 2021 14:40:13 +0000 Subject: [PATCH 2/3] Revert "Unhide IpPrefix(InetAddress, int)" Revert "Add APIs that allow to exclude routes from VPN" Revert "Suppress NewApi warnings for @SystemApi -> public APIs" Revert "Add VpnServiceBuilderShim for VpnService.Builder" Revert submission 1551943-vpn-impl Reason for revert: , bug b/210979001 Reverted Changes: I0e7aa077a:Add VpnServiceBuilderShim for VpnService.Builder Ib12f5ab39:Suppress NewApi warnings for @SystemApi -> public ... I59b9185cf:Unhide RouteInfo#getType and related fields Ie5b62b2b2:Unhide IpPrefix(InetAddress, int) I993a32d40:Add CTS tests for exclude VPN routes APIs Ib24b2d3fb:Suppress NewApi warnings for @SystemApi -> public ... Ic3b10464a:Add APIs that allow to exclude routes from VPN Change-Id: Id0c373fb042a98c1c68807acf7fcfe456520ebe2 BUG: 210979001 --- framework/api/current.txt | 1 - framework/api/system-current.txt | 1 + framework/src/android/net/IpPrefix.java | 2 ++ tests/common/java/android/net/IpPrefixTest.java | 3 --- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/framework/api/current.txt b/framework/api/current.txt index a75523496b..c53f29a5ef 100644 --- a/framework/api/current.txt +++ b/framework/api/current.txt @@ -206,7 +206,6 @@ package android.net { } public final class IpPrefix implements android.os.Parcelable { - ctor public IpPrefix(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int); method public boolean contains(@NonNull java.net.InetAddress); method public int describeContents(); method @NonNull public java.net.InetAddress getAddress(); diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt index 5337b3807c..7db8725582 100644 --- a/framework/api/system-current.txt +++ b/framework/api/system-current.txt @@ -131,6 +131,7 @@ package android.net { } public final class IpPrefix implements android.os.Parcelable { + ctor public IpPrefix(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int); ctor public IpPrefix(@NonNull String); } diff --git a/framework/src/android/net/IpPrefix.java b/framework/src/android/net/IpPrefix.java index c26a0b53bf..bf4481afc5 100644 --- a/framework/src/android/net/IpPrefix.java +++ b/framework/src/android/net/IpPrefix.java @@ -87,7 +87,9 @@ public final class IpPrefix implements Parcelable { * * @param address the IP address. Must be non-null. * @param prefixLength the prefix length. Must be >= 0 and <= (32 or 128) (IPv4 or IPv6). + * @hide */ + @SystemApi public IpPrefix(@NonNull InetAddress address, @IntRange(from = 0, to = 128) int prefixLength) { // We don't reuse the (byte[], int) constructor because it calls clone() on the byte array, // which is unnecessary because getAddress() already returns a clone. diff --git a/tests/common/java/android/net/IpPrefixTest.java b/tests/common/java/android/net/IpPrefixTest.java index f61c8c3583..50ecb42835 100644 --- a/tests/common/java/android/net/IpPrefixTest.java +++ b/tests/common/java/android/net/IpPrefixTest.java @@ -122,9 +122,6 @@ public class IpPrefixTest { p = new IpPrefix("[2001:db8::123]/64"); assertEquals("2001:db8::/64", p.toString()); - - p = new IpPrefix(InetAddresses.parseNumericAddress("::128"), 64); - assertEquals("::/64", p.toString()); } @Test From 6d1ea2bb16451e43b5a2c3da30b49ecfc40037cc Mon Sep 17 00:00:00 2001 From: Ayush Sharma Date: Thu, 16 Dec 2021 14:40:13 +0000 Subject: [PATCH 3/3] Revert "Unhide RouteInfo#getType and related fields" Revert "Add APIs that allow to exclude routes from VPN" Revert "Suppress NewApi warnings for @SystemApi -> public APIs" Revert "Add VpnServiceBuilderShim for VpnService.Builder" Revert submission 1551943-vpn-impl Reason for revert: , bug b/210979001 Reverted Changes: I0e7aa077a:Add VpnServiceBuilderShim for VpnService.Builder Ib12f5ab39:Suppress NewApi warnings for @SystemApi -> public ... I59b9185cf:Unhide RouteInfo#getType and related fields Ie5b62b2b2:Unhide IpPrefix(InetAddress, int) I993a32d40:Add CTS tests for exclude VPN routes APIs Ib24b2d3fb:Suppress NewApi warnings for @SystemApi -> public ... Ic3b10464a:Add APIs that allow to exclude routes from VPN Change-Id: I98d3b998e4702f56e9d5e17944238b283b29f2b2 BUG: 210979001 --- framework/api/current.txt | 4 --- framework/api/system-current.txt | 4 +++ framework/src/android/net/RouteInfo.java | 25 +++++++------------ .../java/android/net/RouteInfoTest.java | 12 --------- 4 files changed, 13 insertions(+), 32 deletions(-) diff --git a/framework/api/current.txt b/framework/api/current.txt index c53f29a5ef..9a77a3ced5 100644 --- a/framework/api/current.txt +++ b/framework/api/current.txt @@ -439,15 +439,11 @@ package android.net { method @NonNull public android.net.IpPrefix getDestination(); method @Nullable public java.net.InetAddress getGateway(); method @Nullable public String getInterface(); - method public int getType(); method public boolean hasGateway(); method public boolean isDefaultRoute(); method public boolean matches(java.net.InetAddress); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; - field public static final int RTN_THROW = 9; // 0x9 - field public static final int RTN_UNICAST = 1; // 0x1 - field public static final int RTN_UNREACHABLE = 7; // 0x7 } public abstract class SocketKeepalive implements java.lang.AutoCloseable { diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt index 7db8725582..cfab8724fd 100644 --- a/framework/api/system-current.txt +++ b/framework/api/system-current.txt @@ -432,6 +432,10 @@ package android.net { ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int); ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int, int); method public int getMtu(); + method public int getType(); + field public static final int RTN_THROW = 9; // 0x9 + field public static final int RTN_UNICAST = 1; // 0x1 + field public static final int RTN_UNREACHABLE = 7; // 0x7 } public abstract class SocketKeepalive implements java.lang.AutoCloseable { diff --git a/framework/src/android/net/RouteInfo.java b/framework/src/android/net/RouteInfo.java index df5f151a3f..fad3144a4b 100644 --- a/framework/src/android/net/RouteInfo.java +++ b/framework/src/android/net/RouteInfo.java @@ -86,26 +86,16 @@ public final class RouteInfo implements Parcelable { private final String mInterface; - /** - * Unicast route. - * - * Indicates that destination is reachable directly or via gateway. - **/ + /** Unicast route. @hide */ + @SystemApi public static final int RTN_UNICAST = 1; - /** - * Unreachable route. - * - * Indicates that destination is unreachable. - **/ + /** Unreachable route. @hide */ + @SystemApi public static final int RTN_UNREACHABLE = 7; - /** - * Throw route. - * - * Indicates that routing information about this destination is not in this table. - * Routing lookup should continue in another table. - **/ + /** Throw route. @hide */ + @SystemApi public static final int RTN_THROW = 9; /** @@ -401,7 +391,10 @@ public final class RouteInfo implements Parcelable { * Retrieves the type of this route. * * @return The type of this route; one of the {@code RTN_xxx} constants defined in this class. + * + * @hide */ + @SystemApi @RouteType public int getType() { return mType; diff --git a/tests/common/java/android/net/RouteInfoTest.java b/tests/common/java/android/net/RouteInfoTest.java index b69b04561b..71689f9197 100644 --- a/tests/common/java/android/net/RouteInfoTest.java +++ b/tests/common/java/android/net/RouteInfoTest.java @@ -16,8 +16,6 @@ package android.net; -import static android.net.RouteInfo.RTN_THROW; -import static android.net.RouteInfo.RTN_UNICAST; import static android.net.RouteInfo.RTN_UNREACHABLE; import static com.android.testutils.MiscAsserts.assertEqualBothWays; @@ -330,16 +328,6 @@ public class RouteInfoTest { } } - @Test - public void testRouteTypes() { - RouteInfo r = new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), RTN_UNREACHABLE); - assertEquals(RTN_UNREACHABLE, r.getType()); - r = new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), RTN_UNICAST); - assertEquals(RTN_UNICAST, r.getType()); - r = new RouteInfo(new IpPrefix(Inet6Address.ANY, 0), RTN_THROW); - assertEquals(RTN_THROW, r.getType()); - } - @Test public void testTruncation() { LinkAddress l;