From 94887874e385797ac5290e867fe412b9d6fc2f9c Mon Sep 17 00:00:00 2001 From: Erik Kline Date: Tue, 5 Apr 2016 13:30:49 +0900 Subject: [PATCH] Don't flush DNS cache on route changes. Since Lollipop, routes are isolated within Networks. Flushing a Network's DNS cache whenever that same Network's routes are updated doesn't provide any benefit. Any system components depending on this behaviour need to uncovered and fixed. Additionally, clean up no-longer-used flushNetworkDnsCache(). This should be replaced, when needed, by a proper binder interface to netd. Change-Id: I34bf79e4839da014d466058a876d754209d0c007 --- .../android/os/INetworkManagementService.aidl | 5 --- .../android/server/ConnectivityService.java | 44 ++++++++----------- .../server/NetworkManagementService.java | 10 ----- 3 files changed, 19 insertions(+), 40 deletions(-) diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index 24a6cdf83b7a2..68b0a9fb29692 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -328,11 +328,6 @@ interface INetworkManagementService */ void setDnsServersForNetwork(int netId, in String[] servers, String domains); - /** - * Flush the DNS cache associated with the specified network. - */ - void flushNetworkDnsCache(int netId); - void setFirewallEnabled(boolean enabled); boolean isFirewallEnabled(); void setFirewallInterfaceRule(String iface, boolean allow); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index a4d6be53a0332..82a36b4958a6f 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -4134,8 +4134,8 @@ public class ConnectivityService extends IConnectivityManager.Stub // } updateTcpBufferSizes(networkAgent); - final boolean flushDns = updateRoutes(newLp, oldLp, netId); - updateDnses(newLp, oldLp, netId, flushDns); + updateRoutes(newLp, oldLp, netId); + updateDnses(newLp, oldLp, netId); updateClat(newLp, oldLp, networkAgent); if (isDefaultNetwork(networkAgent)) { @@ -4238,30 +4238,24 @@ public class ConnectivityService extends IConnectivityManager.Stub return !routeDiff.added.isEmpty() || !routeDiff.removed.isEmpty(); } - private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId, - boolean flush) { - if (oldLp == null || (newLp.isIdenticalDnses(oldLp) == false)) { - Collection dnses = newLp.getDnsServers(); - if (DBG) log("Setting Dns servers for network " + netId + " to " + dnses); - try { - mNetd.setDnsServersForNetwork(netId, NetworkUtils.makeStrings(dnses), - newLp.getDomains()); - } catch (Exception e) { - loge("Exception in setDnsServersForNetwork: " + e); - } - final NetworkAgentInfo defaultNai = getDefaultNetwork(); - if (defaultNai != null && defaultNai.network.netId == netId) { - setDefaultDnsSystemProperties(dnses); - } - flushVmDnsCache(); - } else if (flush) { - try { - mNetd.flushNetworkDnsCache(netId); - } catch (Exception e) { - loge("Exception in flushNetworkDnsCache: " + e); - } - flushVmDnsCache(); + private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId) { + if (oldLp != null && newLp.isIdenticalDnses(oldLp)) { + return; // no updating necessary } + + Collection dnses = newLp.getDnsServers(); + if (DBG) log("Setting Dns servers for network " + netId + " to " + dnses); + try { + mNetd.setDnsServersForNetwork( + netId, NetworkUtils.makeStrings(dnses), newLp.getDomains()); + } catch (Exception e) { + loge("Exception in setDnsServersForNetwork: " + e); + } + final NetworkAgentInfo defaultNai = getDefaultNetwork(); + if (defaultNai != null && defaultNai.network.netId == netId) { + setDefaultDnsSystemProperties(dnses); + } + flushVmDnsCache(); } private void setDefaultDnsSystemProperties(Collection dnses) { diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index c6d536ddf671d..bf4df94e92e23 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -1936,16 +1936,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub } } - @Override - public void flushNetworkDnsCache(int netId) { - mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); - try { - mConnector.execute("resolver", "flushnet", netId); - } catch (NativeDaemonConnectorException e) { - throw e.rethrowAsParcelableException(); - } - } - @Override public void setFirewallEnabled(boolean enabled) { enforceSystemUid();