summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lorenzo Colitti <lorenzo@google.com> 2015-01-20 15:53:02 +0900
committer Lorenzo Colitti <lorenzo@google.com> 2015-01-23 21:10:34 +0900
commit2dfb79a54adeb4bcf1f62332a9db467fce302ced (patch)
treec28c280c295d85f14a4ec5864ec2870ea9d27a19
parentb2053114562830369a9d060e79f0c9eff4be27e7 (diff)
Support connecting to networks with misconfigured subnet masks.
In K and earlier, we would connect to a network where the gateway was not covered by the subnet mask of the IP address. This is an invalid configuration, but it used to work, and other OSes appear to accept it too, so support it. Bug: 19067207 Change-Id: I822e1d754b336691b675438eefa959a3d75fd07b
-rw-r--r--core/java/android/net/StaticIpConfiguration.java15
1 files changed, 11 insertions, 4 deletions
diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java
index 598a503bfed5..365f2b697e78 100644
--- a/core/java/android/net/StaticIpConfiguration.java
+++ b/core/java/android/net/StaticIpConfiguration.java
@@ -76,15 +76,22 @@ public class StaticIpConfiguration implements Parcelable {
/**
* Returns the network routes specified by this object. Will typically include a
- * directly-connected route for the IP address's local subnet and a default route.
+ * directly-connected route for the IP address's local subnet and a default route. If the
+ * default gateway is not covered by the directly-connected route, it will also contain a host
+ * route to the gateway as well. This configuration is arguably invalid, but it used to work
+ * in K and earlier, and other OSes appear to accept it.
*/
public List<RouteInfo> getRoutes(String iface) {
- List<RouteInfo> routes = new ArrayList<RouteInfo>(2);
+ List<RouteInfo> routes = new ArrayList<RouteInfo>(3);
if (ipAddress != null) {
- routes.add(new RouteInfo(ipAddress, null, iface));
+ RouteInfo connectedRoute = new RouteInfo(ipAddress, null, iface);
+ routes.add(connectedRoute);
+ if (gateway != null && !connectedRoute.matches(gateway)) {
+ routes.add(RouteInfo.makeHostRoute(gateway, iface));
+ }
}
if (gateway != null) {
- routes.add(new RouteInfo((LinkAddress) null, gateway, iface));
+ routes.add(new RouteInfo((IpPrefix) null, gateway, iface));
}
return routes;
}