From e83d181606981bcacd78e55b293fe9fa95b2551d Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Mon, 21 Nov 2011 14:44:39 -0800 Subject: [PATCH] Fix some policy-base routing issues. Secondary nets sometimes come up with no routes, but parsing errors end up with null routes getting added. Trim that away. Also added some dumpstate logging of the secondary route tables and rules. bug:5615697 Change-Id: I94c9d888bab958df44891b9117236436e046cc7f --- cmds/dumpstate/dumpstate.c | 6 ++++++ .../server/NetworkManagementService.java | 18 +++++++++++------- .../internal/telephony/DataCallState.java | 8 ++++++++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c index ca66a4e7e672d..9eab2fcc59a33 100644 --- a/cmds/dumpstate/dumpstate.c +++ b/cmds/dumpstate/dumpstate.c @@ -120,6 +120,12 @@ static void dumpstate() { dump_file("NETWORK ROUTES", "/proc/net/route"); dump_file("NETWORK ROUTES IPV6", "/proc/net/ipv6_route"); + run_command("IP RULES", 10, "ip", "rule", "show", NULL); + run_command("IP RULES v6", 10, "ip", "-6", "rule", "show", NULL); + run_command("ROUTE TABLE 60", 10, "ip", "route", "show", "table", "60", NULL); + run_command("ROUTE TABLE 61 v6", 10, "ip", "-6", "route", "show", "table", "60", NULL); + run_command("ROUTE TABLE 61", 10, "ip", "route", "show", "table", "61", NULL); + run_command("ROUTE TABLE 61 v6", 10, "ip", "-6", "route", "show", "table", "61", NULL); dump_file("ARP CACHE", "/proc/net/arp"); run_command("IPTABLES", 10, "su", "root", "iptables", "-L", "-nvx", NULL); run_command("IP6TABLES", 10, "su", "root", "ip6tables", "-L", "-nvx", NULL); diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index da960aeae5e3a..75e5366ba31ed 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -856,13 +856,17 @@ public class NetworkManagementService extends INetworkManagementService.Stub NetworkInterface internalNetworkInterface = NetworkInterface.getByName(internalInterface); - CollectioninterfaceAddresses = - internalNetworkInterface.getInterfaceAddresses(); - cmd += " " + interfaceAddresses.size(); - for (InterfaceAddress ia : interfaceAddresses) { - InetAddress addr = NetworkUtils.getNetworkPart(ia.getAddress(), - ia.getNetworkPrefixLength()); - cmd = cmd + " " + addr.getHostAddress() + "/" + ia.getNetworkPrefixLength(); + if (internalNetworkInterface == null) { + cmd += " 0"; + } else { + CollectioninterfaceAddresses = + internalNetworkInterface.getInterfaceAddresses(); + cmd += " " + interfaceAddresses.size(); + for (InterfaceAddress ia : interfaceAddresses) { + InetAddress addr = NetworkUtils.getNetworkPart(ia.getAddress(), + ia.getNetworkPrefixLength()); + cmd = cmd + " " + addr.getHostAddress() + "/" + ia.getNetworkPrefixLength(); + } } mConnector.doCommand(cmd); diff --git a/telephony/java/com/android/internal/telephony/DataCallState.java b/telephony/java/com/android/internal/telephony/DataCallState.java index 6d8956f452b75..efbf608d90205 100644 --- a/telephony/java/com/android/internal/telephony/DataCallState.java +++ b/telephony/java/com/android/internal/telephony/DataCallState.java @@ -126,6 +126,8 @@ public class DataCallState { // set link addresses if (addresses != null && addresses.length > 0) { for (String addr : addresses) { + addr = addr.trim(); + if (addr.isEmpty()) continue; LinkAddress la; int addrPrefixLen; @@ -159,6 +161,8 @@ public class DataCallState { // set dns servers if (dnses != null && dnses.length > 0) { for (String addr : dnses) { + addr = addr.trim(); + if (addr.isEmpty()) continue; InetAddress ia; try { ia = NetworkUtils.numericToInetAddress(addr); @@ -174,6 +178,8 @@ public class DataCallState { dnsServers[0] = SystemProperties.get(propertyPrefix + "dns1"); dnsServers[1] = SystemProperties.get(propertyPrefix + "dns2"); for (String dnsAddr : dnsServers) { + dnsAddr = dnsAddr.trim(); + if (dnsAddr.isEmpty()) continue; InetAddress ia; try { ia = NetworkUtils.numericToInetAddress(dnsAddr); @@ -198,6 +204,8 @@ public class DataCallState { } } for (String addr : gateways) { + addr = addr.trim(); + if (addr.isEmpty()) continue; InetAddress ia; try { ia = NetworkUtils.numericToInetAddress(addr);