summaryrefslogtreecommitdiffstats
path: root/cmds
diff options
context:
space:
mode:
authorSreeram Ramachandran <sreeram@google.com>2014-07-08 15:40:55 -0700
committerSreeram Ramachandran <sreeram@google.com>2014-07-08 16:29:45 -0700
commit2b3bba34aec65b612be8d1f52cd124d9c30955f9 (patch)
tree8696d520cd8052bda2d6e1af2a3395b182b3903f /cmds
parentf9cfae24123bae199a07bee2dd1c307906c6e6d0 (diff)
downloadframeworks_native-2b3bba34aec65b612be8d1f52cd124d9c30955f9.zip
frameworks_native-2b3bba34aec65b612be8d1f52cd124d9c30955f9.tar.gz
frameworks_native-2b3bba34aec65b612be8d1f52cd124d9c30955f9.tar.bz2
Dump all the correct routing tables.
The list of tables is maintained in /data/misc/net/rt_tables by netd. Change-Id: I55475c08c5e43bcf61af916210e680c47480ac32
Diffstat (limited to 'cmds')
-rw-r--r--cmds/dumpstate/dumpstate.c7
-rw-r--r--cmds/dumpstate/dumpstate.h3
-rw-r--r--cmds/dumpstate/utils.c19
3 files changed, 25 insertions, 4 deletions
diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c
index 3c79ae9..b634719 100644
--- a/cmds/dumpstate/dumpstate.c
+++ b/cmds/dumpstate/dumpstate.c
@@ -174,10 +174,9 @@ static void dumpstate() {
run_command("NETWORK INTERFACES", 10, SU_PATH, "root", "netcfg", NULL);
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_route_tables();
+
dump_file("ARP CACHE", "/proc/net/arp");
run_command("IPTABLES", 10, SU_PATH, "root", "iptables", "-L", "-nvx", NULL);
run_command("IP6TABLES", 10, SU_PATH, "root", "ip6tables", "-L", "-nvx", NULL);
diff --git a/cmds/dumpstate/dumpstate.h b/cmds/dumpstate/dumpstate.h
index 67bbd7e..6906dcf 100644
--- a/cmds/dumpstate/dumpstate.h
+++ b/cmds/dumpstate/dumpstate.h
@@ -60,6 +60,9 @@ void do_showmap(int pid, const char *name);
/* Gets the dmesg output for the kernel */
void do_dmesg();
+/* Prints the contents of all the routing tables, both IPv4 and IPv6. */
+void dump_route_tables();
+
/* Play a sound via Stagefright */
void play_sound(const char* path);
diff --git a/cmds/dumpstate/utils.c b/cmds/dumpstate/utils.c
index 670e09c..3b19f59 100644
--- a/cmds/dumpstate/utils.c
+++ b/cmds/dumpstate/utils.c
@@ -593,3 +593,22 @@ error_close_fd:
void play_sound(const char* path) {
run_command(NULL, 5, "/system/bin/stagefright", "-o", "-a", path, NULL);
}
+
+void dump_route_tables() {
+ const char* const RT_TABLES_PATH = "/data/misc/net/rt_tables";
+ dump_file("RT_TABLES", RT_TABLES_PATH);
+ FILE* fp = fopen(RT_TABLES_PATH, "r");
+ if (!fp) {
+ printf("*** %s: %s\n", RT_TABLES_PATH, strerror(errno));
+ return;
+ }
+ char table[16];
+ // Each line has an integer (the table number), a space, and a string (the table name). We only
+ // need the table number. It's a 32-bit unsigned number, so max 10 chars. Skip the table name.
+ // Add a fixed max limit so this doesn't go awry.
+ for (int i = 0; i < 64 && fscanf(fp, " %10s %*s", table) == 1; ++i) {
+ run_command("ROUTE TABLE IPv4", 10, "ip", "-4", "route", "show", "table", table, NULL);
+ run_command("ROUTE TABLE IPv6", 10, "ip", "-6", "route", "show", "table", table, NULL);
+ }
+ fclose(fp);
+}