Merge "Always specify an interface for host routes." into jb-mr2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
de96589113
@ -117,17 +117,17 @@ public class RouteInfo implements Parcelable {
|
||||
this(host, null, null);
|
||||
}
|
||||
|
||||
public static RouteInfo makeHostRoute(InetAddress host) {
|
||||
return makeHostRoute(host, null);
|
||||
public static RouteInfo makeHostRoute(InetAddress host, String iface) {
|
||||
return makeHostRoute(host, null, iface);
|
||||
}
|
||||
|
||||
public static RouteInfo makeHostRoute(InetAddress host, InetAddress gateway) {
|
||||
public static RouteInfo makeHostRoute(InetAddress host, InetAddress gateway, String iface) {
|
||||
if (host == null) return null;
|
||||
|
||||
if (host instanceof Inet4Address) {
|
||||
return new RouteInfo(new LinkAddress(host, 32), gateway);
|
||||
return new RouteInfo(new LinkAddress(host, 32), gateway, iface);
|
||||
} else {
|
||||
return new RouteInfo(new LinkAddress(host, 128), gateway);
|
||||
return new RouteInfo(new LinkAddress(host, 128), gateway, iface);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1430,17 +1430,18 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
||||
|
||||
private boolean modifyRouteToAddress(LinkProperties lp, InetAddress addr, boolean doAdd,
|
||||
boolean toDefaultTable) {
|
||||
String iface = lp.getInterfaceName();
|
||||
RouteInfo bestRoute = RouteInfo.selectBestRoute(lp.getRoutes(), addr);
|
||||
if (bestRoute == null) {
|
||||
bestRoute = RouteInfo.makeHostRoute(addr);
|
||||
bestRoute = RouteInfo.makeHostRoute(addr, iface);
|
||||
} else {
|
||||
if (bestRoute.getGateway().equals(addr)) {
|
||||
// if there is no better route, add the implied hostroute for our gateway
|
||||
bestRoute = RouteInfo.makeHostRoute(addr);
|
||||
bestRoute = RouteInfo.makeHostRoute(addr, iface);
|
||||
} else {
|
||||
// if we will connect to this through another route, add a direct route
|
||||
// to it's gateway
|
||||
bestRoute = RouteInfo.makeHostRoute(addr, bestRoute.getGateway());
|
||||
bestRoute = RouteInfo.makeHostRoute(addr, bestRoute.getGateway(), iface);
|
||||
}
|
||||
}
|
||||
return modifyRoute(lp.getInterfaceName(), lp, bestRoute, 0, doAdd, toDefaultTable);
|
||||
@ -1463,11 +1464,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
||||
if (bestRoute != null) {
|
||||
if (bestRoute.getGateway().equals(r.getGateway())) {
|
||||
// if there is no better route, add the implied hostroute for our gateway
|
||||
bestRoute = RouteInfo.makeHostRoute(r.getGateway());
|
||||
bestRoute = RouteInfo.makeHostRoute(r.getGateway(), ifaceName);
|
||||
} else {
|
||||
// if we will connect to our gateway through another route, add a direct
|
||||
// route to it's gateway
|
||||
bestRoute = RouteInfo.makeHostRoute(r.getGateway(), bestRoute.getGateway());
|
||||
bestRoute = RouteInfo.makeHostRoute(r.getGateway(),
|
||||
bestRoute.getGateway(),
|
||||
ifaceName);
|
||||
}
|
||||
modifyRoute(ifaceName, lp, bestRoute, cycleCount+1, doAdd, toDefaultTable);
|
||||
}
|
||||
|
@ -62,13 +62,17 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
||||
private static final String MOBILE_IFACE = "rmnet3";
|
||||
private static final String WIFI_IFACE = "wlan6";
|
||||
|
||||
private static final RouteInfo MOBILE_ROUTE_V4 = RouteInfo.makeHostRoute(parse("10.0.0.33"));
|
||||
private static final RouteInfo MOBILE_ROUTE_V6 = RouteInfo.makeHostRoute(parse("fd00::33"));
|
||||
private static final RouteInfo MOBILE_ROUTE_V4 = RouteInfo.makeHostRoute(parse("10.0.0.33"),
|
||||
MOBILE_IFACE);
|
||||
private static final RouteInfo MOBILE_ROUTE_V6 = RouteInfo.makeHostRoute(parse("fd00::33"),
|
||||
MOBILE_IFACE);
|
||||
|
||||
private static final RouteInfo WIFI_ROUTE_V4 = RouteInfo.makeHostRoute(
|
||||
parse("192.168.0.66"), parse("192.168.0.1"));
|
||||
private static final RouteInfo WIFI_ROUTE_V6 = RouteInfo.makeHostRoute(
|
||||
parse("fd00::66"), parse("fd00::"));
|
||||
private static final RouteInfo WIFI_ROUTE_V4 = RouteInfo.makeHostRoute(parse("192.168.0.66"),
|
||||
parse("192.168.0.1"),
|
||||
WIFI_IFACE);
|
||||
private static final RouteInfo WIFI_ROUTE_V6 = RouteInfo.makeHostRoute(parse("fd00::66"),
|
||||
parse("fd00::"),
|
||||
WIFI_IFACE);
|
||||
|
||||
private INetworkManagementService mNetManager;
|
||||
private INetworkStatsService mStatsService;
|
||||
|
Reference in New Issue
Block a user