From 20068c2d12dbccb7a57fcfca9ec63460268f65d2 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Fri, 28 Nov 2014 20:07:46 +0900 Subject: [PATCH] Only use mDefaultDns if the network claims to offer Internet Currently, if a network does not specify DNS servers, we default it to using 8.8.8.8. This was done because the emulator did not specify DNS servers. However, it causes queries to fail slowly, instead of failing fast, on networks that do not have connectivity to 8.8.8.8. Bug: 18327075 Change-Id: I0df13ff4a17ee65e640be96695a3af31b020963a --- .../com/android/server/ConnectivityService.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 8b3739dff5..9f86d9af3a 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) {