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

Commit b57edc5a authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

Pass the socket mark for DNS queries to dnsmasq.

This makes tethered clients use the correct DNS servers when
tethering to non-default networks like the DUN APN.

Bug: 16357676
Change-Id: I8933b6de198a92c2aaf0291931ace8966ddba275
parent 551056ec
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -684,6 +684,23 @@ public class ConnectivityManager {
        }
    }

    /**
     * Returns the {@link Network} object currently serving a given type, or
     * null if the given type is not connected.
     *
     * <p>This method requires the caller to hold the permission
     * {@link android.Manifest.permission#ACCESS_NETWORK_STATE}.
     *
     * @hide
     */
    public Network getNetworkForType(int networkType) {
        try {
            return mService.getNetworkForType(networkType);
        } catch (RemoteException e) {
            return null;
        }
    }

    /**
     * Returns an array of all {@link Network} currently tracked by the
     * framework.
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ interface IConnectivityManager
    NetworkInfo getNetworkInfo(int networkType);
    NetworkInfo getNetworkInfoForNetwork(in Network network);
    NetworkInfo[] getAllNetworkInfo();
    Network getNetworkForType(int networkType);
    Network[] getAllNetworks();

    NetworkInfo getProvisioningOrActiveNetworkInfo();
+3 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.os;

import android.net.InterfaceConfiguration;
import android.net.INetworkManagementEventObserver;
import android.net.Network;
import android.net.NetworkStats;
import android.net.RouteInfo;
import android.net.UidRange;
@@ -164,10 +165,10 @@ interface INetworkManagementService
    /**
     * Sets the list of DNS forwarders (in order of priority)
     */
    void setDnsForwarders(in String[] dns);
    void setDnsForwarders(in Network network, in String[] dns);

    /**
     * Returns the list of DNS fowarders (in order of priority)
     * Returns the list of DNS forwarders (in order of priority)
     */
    String[] getDnsForwarders();

+12 −1
Original line number Diff line number Diff line
@@ -966,6 +966,17 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        return result.toArray(new NetworkInfo[result.size()]);
    }

    @Override
    public Network getNetworkForType(int networkType) {
        enforceAccessPermission();
        final int uid = Binder.getCallingUid();
        if (isNetworkBlocked(networkType, uid)) {
            return null;
        }
        NetworkAgentInfo nai = mLegacyTypeTracker.getNetworkForType(networkType);
        return (nai == null) ? null : nai.network;
    }

    @Override
    public Network[] getAllNetworks() {
        enforceAccessPermission();
@@ -1724,7 +1735,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        pw.println();

        synchronized (this) {
            pw.println("NetworkTranstionWakeLock is currently " +
            pw.println("NetworkTransitionWakeLock is currently " +
                    (mNetTransitionWakeLock.isHeld() ? "" : "not ") + "held.");
            pw.println("It was last requested for "+mNetTransitionWakeLockCausedBy);
        }
+5 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.net.INetworkManagementEventObserver;
import android.net.InterfaceConfiguration;
import android.net.IpPrefix;
import android.net.LinkAddress;
import android.net.Network;
import android.net.NetworkStats;
import android.net.NetworkUtils;
import android.net.RouteInfo;
@@ -1200,10 +1201,12 @@ public class NetworkManagementService extends INetworkManagementService.Stub
    }

    @Override
    public void setDnsForwarders(String[] dns) {
    public void setDnsForwarders(Network network, String[] dns) {
        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);

        final Command cmd = new Command("tether", "dns", "set");
        int netId = (network != null) ? network.netId : ConnectivityManager.NETID_UNSET;
        final Command cmd = new Command("tether", "dns", "set", netId);

        for (String s : dns) {
            cmd.appendArg(NetworkUtils.numericToInetAddress(s).getHostAddress());
        }
Loading