diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 2e64640033df4..5eec0b7692f92 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -3593,8 +3593,14 @@ public class ConnectivityService extends IConnectivityManager.Stub // updateMtu(lp, null); // } updateTcpBufferSizes(networkAgent); + + // TODO: deprecate and remove mDefaultDns when we can do so safely. + // For now, use it only when the network has Internet access. http://b/18327075 + final boolean useDefaultDns = networkAgent.networkCapabilities.hasCapability( + NetworkCapabilities.NET_CAPABILITY_INTERNET); final boolean flushDns = updateRoutes(newLp, oldLp, netId); - updateDnses(newLp, oldLp, netId, flushDns); + updateDnses(newLp, oldLp, netId, flushDns, useDefaultDns); + updateClat(newLp, oldLp, networkAgent); if (isDefaultNetwork(networkAgent)) handleApplyDefaultProxy(newLp.getHttpProxy()); // TODO - move this check to cover the whole function @@ -3688,10 +3694,11 @@ public class ConnectivityService extends IConnectivityManager.Stub } return !routeDiff.added.isEmpty() || !routeDiff.removed.isEmpty(); } - private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId, boolean flush) { + private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId, + boolean flush, boolean useDefaultDns) { if (oldLp == null || (newLp.isIdenticalDnses(oldLp) == false)) { Collection dnses = newLp.getDnsServers(); - if (dnses.size() == 0 && mDefaultDns != null) { + if (dnses.size() == 0 && mDefaultDns != null && useDefaultDns) { dnses = new ArrayList(); dnses.add(mDefaultDns); if (DBG) { diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index 5fe0d1cada4e9..748018dd1568f 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -1710,14 +1710,18 @@ public class NetworkManagementService extends INetworkManagementService.Stub public void setDnsServersForNetwork(int netId, String[] servers, String domains) { mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); - final Command cmd = new Command("resolver", "setnetdns", netId, - (domains == null ? "" : domains)); - - for (String s : servers) { - InetAddress a = NetworkUtils.numericToInetAddress(s); - if (a.isAnyLocalAddress() == false) { - cmd.appendArg(a.getHostAddress()); + Command cmd; + if (servers.length > 0) { + cmd = new Command("resolver", "setnetdns", netId, + (domains == null ? "" : domains)); + for (String s : servers) { + InetAddress a = NetworkUtils.numericToInetAddress(s); + if (a.isAnyLocalAddress() == false) { + cmd.appendArg(a.getHostAddress()); + } } + } else { + cmd = new Command("resolver", "clearnetdns", netId); } try {