diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2011-08-16 09:41:54 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-08-16 09:41:54 -0700 |
commit | 8e99d183345391cddec70e18d3c41cf21f9f67cb (patch) | |
tree | af48f504e223f41a296fb0435cd80c613f54829b /services | |
parent | 7a9effebcf84dcbd820cafe6886a5562cb3d8e22 (diff) | |
parent | f125a093636ef22c81a9d90397407f9ef05a6e9a (diff) | |
download | frameworks_base-8e99d183345391cddec70e18d3c41cf21f9f67cb.zip frameworks_base-8e99d183345391cddec70e18d3c41cf21f9f67cb.tar.gz frameworks_base-8e99d183345391cddec70e18d3c41cf21f9f67cb.tar.bz2 |
Merge "Flush central DNS cache when things change."
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index acfc7a4..a506636 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -1778,15 +1778,26 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } mCurrentLinkProperties[netType] = newLp; - updateRoutes(newLp, curLp, mNetConfigs[netType].isDefault()); + boolean resetDns = updateRoutes(newLp, curLp, mNetConfigs[netType].isDefault()); - if (doReset || resetMask != 0) { + if (doReset || resetMask != 0 || resetDns) { LinkProperties linkProperties = mNetTrackers[netType].getLinkProperties(); if (linkProperties != null) { String iface = linkProperties.getInterfaceName(); if (TextUtils.isEmpty(iface) == false) { - if (DBG) log("resetConnections(" + iface + ", " + resetMask + ")"); - NetworkUtils.resetConnections(iface, resetMask); + if (doReset || resetMask != 0) { + if (DBG) log("resetConnections(" + iface + ", " + resetMask + ")"); + NetworkUtils.resetConnections(iface, resetMask); + } + if (resetDns) { + if (DBG) log("resetting DNS cache for " + iface); + try { + mNetd.flushInterfaceDnsCache(iface); + } catch (Exception e) { + // never crash - catch them all + loge("Exception resetting dns cache: " + e); + } + } } } } @@ -1808,8 +1819,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { * is a noop. * Uses isLinkDefault to determine if default routes should be set or conversely if * host routes should be set to the dns servers + * returns a boolean indicating the routes changed */ - private void updateRoutes(LinkProperties newLp, LinkProperties curLp, boolean isLinkDefault) { + private boolean updateRoutes(LinkProperties newLp, LinkProperties curLp, + boolean isLinkDefault) { Collection<RouteInfo> routesToAdd = null; CompareResult<InetAddress> dnsDiff = new CompareResult<InetAddress>(); CompareResult<RouteInfo> routeDiff = new CompareResult<RouteInfo>(); @@ -1822,6 +1835,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { dnsDiff.added = newLp.getDnses(); } + boolean routesChanged = (routeDiff.removed.size() != 0 || routeDiff.added.size() != 0); + for (RouteInfo r : routeDiff.removed) { if (isLinkDefault || ! r.isDefaultRoute()) { removeRoute(curLp, r); @@ -1849,15 +1864,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (!isLinkDefault) { // handle DNS routes - if (routeDiff.removed.size() == 0 && routeDiff.added.size() == 0) { - // no change in routes, check for change in dns themselves - for (InetAddress oldDns : dnsDiff.removed) { - removeRouteToAddress(curLp, oldDns); - } - for (InetAddress newDns : dnsDiff.added) { - addRouteToAddress(newLp, newDns); - } - } else { + if (routesChanged) { // routes changed - remove all old dns entries and add new if (curLp != null) { for (InetAddress oldDns : curLp.getDnses()) { @@ -1869,8 +1876,17 @@ public class ConnectivityService extends IConnectivityManager.Stub { addRouteToAddress(newLp, newDns); } } + } else { + // no change in routes, check for change in dns themselves + for (InetAddress oldDns : dnsDiff.removed) { + removeRouteToAddress(curLp, oldDns); + } + for (InetAddress newDns : dnsDiff.added) { + addRouteToAddress(newLp, newDns); + } } } + return routesChanged; } |