First pass tying into per-interface DNS cache

Change-Id: Iacce225d392786e37fa2dbf9647045fca0b70e64
This commit is contained in:
Robert Greenwalt
2011-05-20 14:35:50 -07:00
parent 0249717644
commit 44cc474470

View File

@@ -38,6 +38,7 @@ import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.os.INetworkManagementService;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.SystemProperties; import android.os.SystemProperties;
@@ -111,6 +112,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
private boolean mTestMode; private boolean mTestMode;
private static ConnectivityService sServiceInstance; private static ConnectivityService sServiceInstance;
private INetworkManagementService mNetd;
private static final int ENABLED = 1; private static final int ENABLED = 1;
private static final int DISABLED = 0; private static final int DISABLED = 0;
@@ -1278,6 +1282,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
} }
void systemReady() { void systemReady() {
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
mNetd = INetworkManagementService.Stub.asInterface(b);
synchronized(this) { synchronized(this) {
mSystemReady = true; mSystemReady = true;
if (mInitialBroadcast != null) { if (mInitialBroadcast != null) {
@@ -1470,6 +1477,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
NetworkStateTracker nt = mNetTrackers[netType]; NetworkStateTracker nt = mNetTrackers[netType];
if (nt != null && nt.getNetworkInfo().isConnected() && !nt.isTeardownRequested()) { if (nt != null && nt.getNetworkInfo().isConnected() && !nt.isTeardownRequested()) {
String[] dnsList = nt.getNameServers(); String[] dnsList = nt.getNameServers();
try {
mNetd.setDnsServersForInterface(Integer.toString(netType), dnsList);
} catch (Exception e) {
Slog.e(TAG, "exception setting dns servers: " + e);
}
if (mNetAttributes[netType].isDefault()) { if (mNetAttributes[netType].isDefault()) {
int j = 1; int j = 1;
for (String dns : dnsList) { for (String dns : dnsList) {
@@ -1481,6 +1493,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
SystemProperties.set("net.dns" + j++, dns); SystemProperties.set("net.dns" + j++, dns);
} }
} }
try {
mNetd.setDefaultInterfaceForDns(Integer.toString(netType));
} catch (Exception e) {
Slog.e(TAG, "exception setting default dns interface: " + e);}
for (int k=j ; k<mNumDnsEntries; k++) { for (int k=j ; k<mNumDnsEntries; k++) {
if (DBG) Slog.d(TAG, "erasing net.dns" + k); if (DBG) Slog.d(TAG, "erasing net.dns" + k);
SystemProperties.set("net.dns" + k, ""); SystemProperties.set("net.dns" + k, "");