Merge "Flush DNS cache when routes change." into lmp-dev

This commit is contained in:
Paul Jensen
2014-08-07 02:42:15 +00:00
committed by Android (Google) Code Review

View File

@@ -4236,8 +4236,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// for (LinkProperties lp : newLp.getStackedLinks()) {
// updateMtu(lp, null);
// }
updateRoutes(newLp, oldLp, netId);
updateDnses(newLp, oldLp, netId);
final boolean flushDns = updateRoutes(newLp, oldLp, netId);
updateDnses(newLp, oldLp, netId, flushDns);
updateClat(newLp, oldLp, networkAgent);
}
@@ -4285,7 +4285,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
}
private void updateRoutes(LinkProperties newLp, LinkProperties oldLp, int netId) {
/**
* Have netd update routes from oldLp to newLp.
* @return true if routes changed between oldLp and newLp
*/
private boolean updateRoutes(LinkProperties newLp, LinkProperties oldLp, int netId) {
CompareResult<RouteInfo> routeDiff = new CompareResult<RouteInfo>();
if (oldLp != null) {
routeDiff = oldLp.compareAllRoutes(newLp);
@@ -4320,8 +4324,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
loge("Exception in removeRoute: " + e);
}
}
return !routeDiff.added.isEmpty() || !routeDiff.removed.isEmpty();
}
private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId) {
private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId, boolean flush) {
if (oldLp == null || (newLp.isIdenticalDnses(oldLp) == false)) {
Collection<InetAddress> dnses = newLp.getDnsServers();
if (dnses.size() == 0 && mDefaultDns != null) {
@@ -4342,6 +4347,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
setDefaultDnsSystemProperties(dnses);
}
flushVmDnsCache();
} else if (flush) {
try {
mNetd.flushNetworkDnsCache(netId);
} catch (Exception e) {
loge("Exception in flushNetworkDnsCache: " + e);
}
flushVmDnsCache();
}
}