From 03d53da1f5eb76e26e573f081ee4b5a5f2c1a4fd Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Tue, 22 Mar 2011 18:47:42 -0700 Subject: [PATCH] Fix adding of default route. If you deleted the host routes (started a secondary network like mms, supl of hipri and then ended it) you would lose the host route to the default gateway. Then if you needed to re-add the default gateway route (lost the connection and removed the default route and then re-established) you couldn't - can't add a gateway that isn't routable apparently. This happens if you are in a video chat and lose your connection without losing the interface (PPP keeps it up for a bit). Fixed it by having addDefaultRoute first add a hsot route for the gateway before adding the default route. This allows the default add to succeed. bug:3490353 Change-Id: I415e7319832e6456f8757b14c4f79f098a08839b --- .../android/server/ConnectivityService.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 14a6b96ab0..fcb4c23af2 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -1415,10 +1415,13 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (TextUtils.isEmpty(interfaceName)) return; for (InetAddress gateway : p.getGateways()) { - if (!NetworkUtils.addDefaultRoute(interfaceName, gateway) && DBG) { - NetworkInfo networkInfo = nt.getNetworkInfo(); - log("addDefaultRoute for " + networkInfo.getTypeName() + - " (" + interfaceName + "), GatewayAddr=" + gateway.getHostAddress()); + if (NetworkUtils.addHostRoute(interfaceName, gateway, null) && + NetworkUtils.addDefaultRoute(interfaceName, gateway)) { + if (DBG) { + NetworkInfo networkInfo = nt.getNetworkInfo(); + log("addDefaultRoute for " + networkInfo.getTypeName() + + " (" + interfaceName + "), GatewayAddr=" + gateway.getHostAddress()); + } } } } @@ -1430,10 +1433,12 @@ public class ConnectivityService extends IConnectivityManager.Stub { String interfaceName = p.getInterfaceName(); if (interfaceName != null) { - if ((NetworkUtils.removeDefaultRoute(interfaceName) >= 0) && DBG) { - NetworkInfo networkInfo = nt.getNetworkInfo(); - log("removeDefaultRoute for " + networkInfo.getTypeName() + " (" + - interfaceName + ")"); + if (NetworkUtils.removeDefaultRoute(interfaceName) >= 0) { + if (DBG) { + NetworkInfo networkInfo = nt.getNetworkInfo(); + log("removeDefaultRoute for " + networkInfo.getTypeName() + " (" + + interfaceName + ")"); + } } } }