Merge "Flush DNS cache when routes change." into lmp-dev
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user