Routing workaround.

Change our order of operations so that secondary route table
adds succeed.  Working to understand the why of this too.
bug:8361314

Change-Id: Ie25061eb38c62eaa5e60aa8a488496de49bdbd9d
This commit is contained in:
Robert Greenwalt
2013-04-05 16:49:32 -07:00
parent b4c13c4b04
commit 979ee3cca3

View File

@ -2348,28 +2348,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
for (RouteInfo r : routeDiff.added) {
if (isLinkDefault || ! r.isDefaultRoute()) {
addRoute(newLp, r, TO_DEFAULT_TABLE);
} else {
// add to a secondary route table
addRoute(newLp, r, TO_SECONDARY_TABLE);
// many radios add a default route even when we don't want one.
// remove the default route unless somebody else has asked for it
String ifaceName = newLp.getInterfaceName();
if (TextUtils.isEmpty(ifaceName) == false && mAddedRoutes.contains(r) == false) {
if (VDBG) log("Removing " + r + " for interface " + ifaceName);
try {
mNetd.removeRoute(ifaceName, r);
} catch (Exception e) {
// never crash - catch them all
if (DBG) loge("Exception trying to remove a route: " + e);
}
}
}
}
if (!isLinkDefault) {
// handle DNS routes
if (routesChanged) {
@ -2394,6 +2372,29 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
}
for (RouteInfo r : routeDiff.added) {
if (isLinkDefault || ! r.isDefaultRoute()) {
addRoute(newLp, r, TO_DEFAULT_TABLE);
} else {
// add to a secondary route table
addRoute(newLp, r, TO_SECONDARY_TABLE);
// many radios add a default route even when we don't want one.
// remove the default route unless somebody else has asked for it
String ifaceName = newLp.getInterfaceName();
if (TextUtils.isEmpty(ifaceName) == false && mAddedRoutes.contains(r) == false) {
if (VDBG) log("Removing " + r + " for interface " + ifaceName);
try {
mNetd.removeRoute(ifaceName, r);
} catch (Exception e) {
// never crash - catch them all
if (DBG) loge("Exception trying to remove a route: " + e);
}
}
}
}
return routesChanged;
}