diff options
| author | Robert Greenwalt <robdroid@android.com> | 2010-07-23 15:46:26 -0700 |
|---|---|---|
| committer | Robert Greenwalt <robdroid@android.com> | 2010-08-02 15:40:21 -0700 |
| commit | c76b8fa911bb2501ba55153d3ac25a5132daa3a9 (patch) | |
| tree | 45cbd91ef1a9571fa4c52516abffd89a50e34622 /services/java/com/android/server/ConnectivityService.java | |
| parent | 1f4c67a4b1a051db7cd4afdf7a288141566251d3 (diff) | |
Always try to set/remove default routes
Must clean up default route if a default 3g connection is replaced
by a non-default (ie, mms) connection on the same interface.
Also stop mucking with all connections dns and routes - do it only
for the connection that has changed.
bug:2865974
Change-Id: I589a0b2768b5e67b608fde181e7ddbd7fce4f491
Diffstat (limited to 'services/java/com/android/server/ConnectivityService.java')
| -rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 131 |
1 files changed, 54 insertions, 77 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 311efc8286e8..a204b36f913b 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -605,7 +605,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { !network.isTeardownRequested()) { if (ni.isConnected() == true) { // add the pid-specific dns - handleDnsConfigurationChange(); + handleDnsConfigurationChange(networkType); if (DBG) Slog.d(TAG, "special network already active"); return Phone.APN_ALREADY_ACTIVE; } @@ -967,7 +967,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } // do this before we broadcast the change - handleConnectivityChange(); + handleConnectivityChange(prevNetType); sendStickyBroadcast(intent); /* @@ -1123,9 +1123,6 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } - // do this before we broadcast the change - handleConnectivityChange(); - sendStickyBroadcast(intent); /* * If the failover network is already connected, then immediately send @@ -1204,7 +1201,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } thisNet.setTeardownRequested(false); updateNetworkSettings(thisNet); - handleConnectivityChange(); + handleConnectivityChange(type); sendConnectedBroadcast(info); } @@ -1231,38 +1228,29 @@ public class ConnectivityService extends IConnectivityManager.Stub { } /** - * After any kind of change in the connectivity state of any network, - * make sure that anything that depends on the connectivity state of - * more than one network is set up correctly. We're mainly concerned - * with making sure that the list of DNS servers is set up according - * to which networks are connected, and ensuring that the right routing - * table entries exist. + * After a change in the connectivity state of a network. We're mainly + * concerned with making sure that the list of DNS servers is set up + * according to which networks are connected, and ensuring that the + * right routing table entries exist. */ - private void handleConnectivityChange() { + private void handleConnectivityChange(int netType) { /* * If a non-default network is enabled, add the host routes that - * will allow it's DNS servers to be accessed. Only - * If both mobile and wifi are enabled, add the host routes that - * will allow MMS traffic to pass on the mobile network. But - * remove the default route for the mobile network, so that there - * will be only one default route, to ensure that all traffic - * except MMS will travel via Wi-Fi. + * will allow it's DNS servers to be accessed. */ - handleDnsConfigurationChange(); + handleDnsConfigurationChange(netType); - for (int netType : mPriorityList) { - if (mNetTrackers[netType].getNetworkInfo().isConnected()) { - if (mNetAttributes[netType].isDefault()) { - addDefaultRoute(mNetTrackers[netType]); - } else { - addPrivateDnsRoutes(mNetTrackers[netType]); - } + if (mNetTrackers[netType].getNetworkInfo().isConnected()) { + if (mNetAttributes[netType].isDefault()) { + addDefaultRoute(mNetTrackers[netType]); } else { - if (mNetAttributes[netType].isDefault()) { - removeDefaultRoute(mNetTrackers[netType]); - } else { - removePrivateDnsRoutes(mNetTrackers[netType]); - } + addPrivateDnsRoutes(mNetTrackers[netType]); + } + } else { + if (mNetAttributes[netType].isDefault()) { + removeDefaultRoute(mNetTrackers[netType]); + } else { + removePrivateDnsRoutes(mNetTrackers[netType]); } } } @@ -1310,18 +1298,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (p == null) return; String interfaceName = p.getInterfaceName(); InetAddress defaultGatewayAddr = p.getGateway(); - boolean defaultRouteSet = nt.isDefaultRouteSet(); - - if ((interfaceName != null) && (defaultGatewayAddr != null ) && - (defaultRouteSet == false)) { - boolean error = (NetworkUtils.setDefaultRoute(interfaceName, defaultGatewayAddr) < 0); - if (DBG && !error) { + if ((interfaceName != null) && (defaultGatewayAddr != null )) { + if ((NetworkUtils.setDefaultRoute(interfaceName, defaultGatewayAddr) >= 0) && DBG) { NetworkInfo networkInfo = nt.getNetworkInfo(); Slog.d(TAG, "addDefaultRoute for " + networkInfo.getTypeName() + " (" + interfaceName + "), GatewayAddr=" + defaultGatewayAddr); } - nt.defaultRouteSet(!error); } } @@ -1330,16 +1313,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { NetworkProperties p = nt.getNetworkProperties(); if (p == null) return; String interfaceName = p.getInterfaceName(); - boolean defaultRouteSet = nt.isDefaultRouteSet(); - if (interfaceName != null && defaultRouteSet == true) { - boolean error = (NetworkUtils.removeDefaultRoute(interfaceName) < 0); - if (DBG && !error) { + if (interfaceName != null) { + if ((NetworkUtils.removeDefaultRoute(interfaceName) >= 0) && DBG) { NetworkInfo networkInfo = nt.getNetworkInfo(); Slog.d(TAG, "removeDefaultRoute for " + networkInfo.getTypeName() + " (" + interfaceName + ")"); } - nt.defaultRouteSet(error); } } @@ -1480,42 +1460,37 @@ public class ConnectivityService extends IConnectivityManager.Stub { SystemProperties.set("net.dnschange", "" + (n+1)); } - private void handleDnsConfigurationChange() { + private void handleDnsConfigurationChange(int netType) { // add default net's dns entries - for (int x = mPriorityList.length-1; x>= 0; x--) { - int netType = mPriorityList[x]; - NetworkStateTracker nt = mNetTrackers[netType]; - if (nt != null && nt.getNetworkInfo().isConnected() && - !nt.isTeardownRequested()) { - NetworkProperties p = nt.getNetworkProperties(); - if (p == null) continue; - Collection<InetAddress> dnses = p.getDnses(); - if (mNetAttributes[netType].isDefault()) { - int j = 1; - for (InetAddress dns : dnses) { - if (DBG) { - Slog.d(TAG, "adding dns " + dns + " for " + - nt.getNetworkInfo().getTypeName()); - } - SystemProperties.set("net.dns" + j++, dns.getHostAddress()); - } - for (int k=j ; k<mNumDnsEntries; k++) { - if (DBG) Slog.d(TAG, "erasing net.dns" + k); - SystemProperties.set("net.dns" + k, ""); - } - mNumDnsEntries = j; - } else { - // set per-pid dns for attached secondary nets - List pids = mNetRequestersPids[netType]; - for (int y=0; y< pids.size(); y++) { - Integer pid = (Integer)pids.get(y); - writePidDns(dnses, pid.intValue()); + NetworkStateTracker nt = mNetTrackers[netType]; + if (nt != null && nt.getNetworkInfo().isConnected() && !nt.isTeardownRequested()) { + NetworkProperties p = nt.getNetworkProperties(); + if (p == null) return; + Collection<InetAddress> dnses = p.getDnses(); + if (mNetAttributes[netType].isDefault()) { + int j = 1; + for (InetAddress dns : dnses) { + if (DBG) { + Slog.d(TAG, "adding dns " + dns + " for " + + nt.getNetworkInfo().getTypeName()); } + SystemProperties.set("net.dns" + j++, dns.getHostAddress()); + } + for (int k=j ; k<mNumDnsEntries; k++) { + if (DBG) Slog.d(TAG, "erasing net.dns" + k); + SystemProperties.set("net.dns" + k, ""); + } + mNumDnsEntries = j; + } else { + // set per-pid dns for attached secondary nets + List pids = mNetRequestersPids[netType]; + for (int y=0; y< pids.size(); y++) { + Integer pid = (Integer)pids.get(y); + writePidDns(dnses, pid.intValue()); } } + bumpDns(); } - - bumpDns(); } private int getRestoreDefaultNetworkDelay() { @@ -1654,9 +1629,11 @@ public class ConnectivityService extends IConnectivityManager.Stub { (Notification) msg.obj); case NetworkStateTracker.EVENT_CONFIGURATION_CHANGED: - handleDnsConfigurationChange(); + // TODO - make this handle ip/proxy/gateway/dns changes + info = (NetworkInfo) msg.obj; + type = info.getType(); + handleDnsConfigurationChange(type); break; - case NetworkStateTracker.EVENT_ROAMING_CHANGED: // fill me in break; |
