diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java index 5a273cfaa6..8bf8f2ebaf 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 getRoutes(String iface) { - List routes = new ArrayList(2); + List routes = new ArrayList(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; }