Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94887874 authored by Erik Kline's avatar Erik Kline
Browse files

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
parent 49e2db1b
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -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);
+19 −25
Original line number Diff line number Diff line
@@ -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,14 +4238,16 @@ 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)) {
    private void updateDnses(LinkProperties newLp, LinkProperties oldLp, int netId) {
        if (oldLp != null && newLp.isIdenticalDnses(oldLp)) {
            return;  // no updating necessary
        }

        Collection<InetAddress> dnses = newLp.getDnsServers();
        if (DBG) log("Setting Dns servers for network " + netId + " to " + dnses);
        try {
                mNetd.setDnsServersForNetwork(netId, NetworkUtils.makeStrings(dnses),
                    newLp.getDomains());
            mNetd.setDnsServersForNetwork(
                    netId, NetworkUtils.makeStrings(dnses), newLp.getDomains());
        } catch (Exception e) {
            loge("Exception in setDnsServersForNetwork: " + e);
        }
@@ -4254,14 +4256,6 @@ 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();
        }
    }

    private void setDefaultDnsSystemProperties(Collection<InetAddress> dnses) {
+0 −10
Original line number Diff line number Diff line
@@ -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();