Merge changes from topic "MDns_AIDL"
* changes:
Freeze Mdns AIDL interface to V1
Add MDNS aidl
diff --git a/common/framework/com/android/net/module/util/NetUtils.java b/common/framework/com/android/net/module/util/NetUtils.java
index f08257a..ae1b9bb 100644
--- a/common/framework/com/android/net/module/util/NetUtils.java
+++ b/common/framework/com/android/net/module/util/NetUtils.java
@@ -44,7 +44,9 @@
/**
* Find the route from a Collection of routes that best matches a given address.
- * May return null if no routes are applicable.
+ * May return null if no routes are applicable, or the best route is not a route of
+ * {@link RouteInfo.RTN_UNICAST} type.
+ *
* @param routes a Collection of RouteInfos to chose from
* @param dest the InetAddress your trying to get to
* @return the RouteInfo from the Collection that best fits the given address
@@ -55,6 +57,7 @@
if ((routes == null) || (dest == null)) return null;
RouteInfo bestRoute = null;
+
// pick a longest prefix match under same address type
for (RouteInfo route : routes) {
if (addressTypeMatches(route.getDestination().getAddress(), dest)) {
@@ -66,7 +69,12 @@
if (route.matches(dest)) bestRoute = route;
}
}
- return bestRoute;
+
+ if (bestRoute != null && bestRoute.getType() == RouteInfo.RTN_UNICAST) {
+ return bestRoute;
+ } else {
+ return null;
+ }
}
/**
diff --git a/common/native/tcutils/Android.bp b/common/native/tcutils/Android.bp
index e819e4c..88a2683 100644
--- a/common/native/tcutils/Android.bp
+++ b/common/native/tcutils/Android.bp
@@ -39,7 +39,7 @@
visibility: [
"//frameworks/libs/net/common/native/bpfmapjni",
"//packages/modules/Connectivity:__subpackages__",
- "//system/netd/server",
+ "//system/netd:__subpackages__",
],
}
diff --git a/common/tests/unit/src/com/android/net/module/util/NetUtilsTest.java b/common/tests/unit/src/com/android/net/module/util/NetUtilsTest.java
index 902c18e..9e635c2 100644
--- a/common/tests/unit/src/com/android/net/module/util/NetUtilsTest.java
+++ b/common/tests/unit/src/com/android/net/module/util/NetUtilsTest.java
@@ -16,9 +16,12 @@
package com.android.net.module.util;
+import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import android.net.InetAddresses;
@@ -27,6 +30,10 @@
import androidx.test.runner.AndroidJUnit4;
+import com.android.testutils.DevSdkIgnoreRule;
+import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
+
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -36,6 +43,9 @@
@RunWith(AndroidJUnit4.class)
public final class NetUtilsTest {
+ @Rule
+ public final DevSdkIgnoreRule ignoreRule = new DevSdkIgnoreRule();
+
private static final InetAddress V4_ADDR1 = toInetAddress("75.208.7.1");
private static final InetAddress V4_ADDR2 = toInetAddress("75.208.7.2");
private static final InetAddress V6_ADDR1 = toInetAddress("2001:0db8:85a3::8a2e:0370:7334");
@@ -44,9 +54,18 @@
private static final InetAddress V4_GATEWAY = toInetAddress("75.208.8.1");
private static final InetAddress V6_GATEWAY = toInetAddress("fe80::6:0000:613");
+ private static final InetAddress V4_DEST = toInetAddress("75.208.8.15");
+ private static final InetAddress V6_DEST = toInetAddress("2001:db8:cafe::123");
+
+ private static final RouteInfo V4_EXPECTED = new RouteInfo(new IpPrefix("75.208.8.0/24"),
+ V4_GATEWAY, "wlan0");
+ private static final RouteInfo V6_EXPECTED = new RouteInfo(new IpPrefix("2001:db8:cafe::/64"),
+ V6_GATEWAY, "wlan0");
+
private static InetAddress toInetAddress(String addr) {
return InetAddresses.parseNumericAddress(addr);
}
+
@Test
public void testAddressTypeMatches() {
assertTrue(NetUtils.addressTypeMatches(V4_ADDR1, V4_ADDR2));
@@ -58,48 +77,67 @@
@Test
public void testSelectBestRoute() {
final List<RouteInfo> routes = new ArrayList<>();
- final InetAddress v4_dest = InetAddresses.parseNumericAddress("75.208.8.15");
- final InetAddress v6_dest = InetAddresses.parseNumericAddress("2001:db8:cafe::123");
- RouteInfo route = NetUtils.selectBestRoute(null, v4_dest);
- assertEquals(null, route);
+ RouteInfo route = NetUtils.selectBestRoute(null, V4_DEST);
+ assertNull(route);
route = NetUtils.selectBestRoute(routes, null);
- assertEquals(null, route);
+ assertNull(route);
- route = NetUtils.selectBestRoute(routes, v4_dest);
- assertEquals(null, route);
+ route = NetUtils.selectBestRoute(routes, V4_DEST);
+ assertNull(route);
- final RouteInfo v4_expected = new RouteInfo(new IpPrefix("75.208.8.0/24"),
- V4_GATEWAY, "wlan0");
- routes.add(v4_expected);
+ routes.add(V4_EXPECTED);
// "75.208.0.0/16" is not an expected result since it is not the longest prefix.
routes.add(new RouteInfo(new IpPrefix("75.208.0.0/16"), V4_GATEWAY, "wlan0"));
routes.add(new RouteInfo(new IpPrefix("75.208.7.0/24"), V4_GATEWAY, "wlan0"));
- final RouteInfo v6_expected = new RouteInfo(new IpPrefix("2001:db8:cafe::/64"),
- V6_GATEWAY, "wlan0");
- routes.add(v6_expected);
+ routes.add(V6_EXPECTED);
// "2001:db8::/32" is not an expected result since it is not the longest prefix.
routes.add(new RouteInfo(new IpPrefix("2001:db8::/32"), V6_GATEWAY, "wlan0"));
routes.add(new RouteInfo(new IpPrefix("2001:db8:beef::/64"), V6_GATEWAY, "wlan0"));
// Verify expected v4 route is selected
- route = NetUtils.selectBestRoute(routes, v4_dest);
- assertEquals(v4_expected, route);
+ route = NetUtils.selectBestRoute(routes, V4_DEST);
+ assertEquals(V4_EXPECTED, route);
// Verify expected v6 route is selected
- route = NetUtils.selectBestRoute(routes, v6_dest);
- assertEquals(v6_expected, route);
+ route = NetUtils.selectBestRoute(routes, V6_DEST);
+ assertEquals(V6_EXPECTED, route);
// Remove expected v4 route
- routes.remove(v4_expected);
- route = NetUtils.selectBestRoute(routes, v4_dest);
- assertNotEquals(v4_expected, route);
+ routes.remove(V4_EXPECTED);
+ route = NetUtils.selectBestRoute(routes, V4_DEST);
+ assertNotEquals(V4_EXPECTED, route);
// Remove expected v6 route
- routes.remove(v6_expected);
- route = NetUtils.selectBestRoute(routes, v4_dest);
- assertNotEquals(v6_expected, route);
+ routes.remove(V6_EXPECTED);
+ route = NetUtils.selectBestRoute(routes, V4_DEST);
+ assertNotEquals(V6_EXPECTED, route);
+ }
+
+ @Test @IgnoreUpTo(SC_V2)
+ public void testSelectBestRouteWithExcludedRoutes() {
+ final List<RouteInfo> routes = new ArrayList<>();
+
+ routes.add(V4_EXPECTED);
+ routes.add(new RouteInfo(new IpPrefix("75.208.0.0/16"), V4_GATEWAY, "wlan0"));
+ routes.add(new RouteInfo(new IpPrefix("75.208.7.0/24"), V4_GATEWAY, "wlan0"));
+
+ routes.add(V6_EXPECTED);
+ routes.add(new RouteInfo(new IpPrefix("2001:db8::/32"), V6_GATEWAY, "wlan0"));
+ routes.add(new RouteInfo(new IpPrefix("2001:db8:beef::/64"), V6_GATEWAY, "wlan0"));
+
+ // After adding excluded v4 route with longer prefix, expected result is null.
+ routes.add(new RouteInfo(new IpPrefix("75.208.8.0/28"), null /* gateway */, "wlan0",
+ RouteInfo.RTN_THROW));
+ RouteInfo route = NetUtils.selectBestRoute(routes, V4_DEST);
+ assertNull(route);
+
+ // After adding excluded v6 route with longer prefix, expected result is null.
+ routes.add(new RouteInfo(new IpPrefix("2001:db8:cafe::/96"), null /* gateway */, "wlan0",
+ RouteInfo.RTN_THROW));
+ route = NetUtils.selectBestRoute(routes, V6_DEST);
+ assertNull(route);
}
}