From: Simon Wunderlich simon@open-mesh.com
Signed-off-by: Simon Wunderlich simon@open-mesh.com --- debug.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/debug.c b/debug.c index d57324d..78c6e55 100644 --- a/debug.c +++ b/debug.c @@ -89,8 +89,10 @@ static void debug_table_usage(int debug_table) fprintf(stderr, " \t -H don't show the header\n"); fprintf(stderr, " \t -w [interval] watch mode - refresh the table continuously\n");
- if (debug_table == BATCTL_TABLE_ORIGINATORS) + if (debug_table == BATCTL_TABLE_ORIGINATORS) { fprintf(stderr, " \t -t timeout interval - don't print originators not seen for x.y seconds \n"); + fprintf(stderr, " \t -i [interface] - show multiif originator table for a specific interface\n"); + } }
int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) @@ -98,11 +100,12 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) int optchar, read_opt = USE_BAT_HOSTS; char full_path[MAX_PATH+1]; char *debugfs_mnt; + char *orig_iface = NULL; float orig_timeout; float watch_interval = 1; opterr = 0;
- while ((optchar = getopt(argc, argv, "hnw:t:H")) != -1) { + while ((optchar = getopt(argc, argv, "hnw:t:Hi:")) != -1) { switch (optchar) { case 'h': debug_table_usage(debug_table); @@ -138,11 +141,21 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) case 'H': read_opt |= SKIP_HEADER; break; + case 'i': + if (debug_table != BATCTL_TABLE_ORIGINATORS) { + fprintf(stderr, "Error - unrecognised option '-%c'\n", optchar); + debug_table_usage(debug_table); + return EXIT_FAILURE; + } + + orig_iface = optarg; + break; case '?': - if (optopt == 't') + if (optopt == 't') { fprintf(stderr, "Error - option '-t' needs a number as argument\n"); - - else if (optopt == 'w') { + } else if (optopt == 'i') { + fprintf(stderr, "Error - option '-i' needs an interface as argument\n"); + } else if (optopt == 'w') { read_opt |= CLR_CONT_READ; break; } @@ -162,7 +175,10 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) return EXIT_FAILURE; }
- debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface, full_path, sizeof(full_path)); + if (orig_iface) + debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", orig_iface, full_path, sizeof(full_path)); + else + debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface, full_path, sizeof(full_path)); return read_file(full_path, (char *)batctl_debug_tables[debug_table].debugfs_name, read_opt, orig_timeout, watch_interval, batctl_debug_tables[debug_table].header_lines);
On Tuesday 18 February 2014 15:13:24 Simon Wunderlich wrote:
@@ -162,7 +175,10 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) return EXIT_FAILURE; }
debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface, full_path,
sizeof(full_path)); + if (orig_iface)
debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", orig_iface,
full_path, sizeof(full_path)); + else
debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface,
full_path, sizeof(full_path)); return read_file(full_path, (char *)batctl_debug_tables[debug_table].debugfs_name, read_opt, orig_timeout, watch_interval, batctl_debug_tables[debug_table].header_lines);
While playing with your patch I noticed a couple of things:
* 'batctl originators -i eth0' is equivalent to 'batctl -m eth0 originators' * the latter works even without your patch * the orig table output does not say which interface we are looking at but always reports: (bat0 BATMAN_IV) * /sys/kernel/debug/batman_adv/ contains all sorts of hard-interfaces on my test setup even if they are not used by batman-adv - is the intended ?
Cheers, Marek
On Tuesday 18 February 2014 15:13:24 Simon Wunderlich wrote:
@@ -162,7 +175,10 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) return EXIT_FAILURE;
}
debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface,
full_path, sizeof(full_path)); + if (orig_iface)
debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", orig_iface,
full_path, sizeof(full_path)); + else
debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface,
full_path, sizeof(full_path)); return read_file(full_path, (char *)batctl_debug_tables[debug_table].debugfs_name, read_opt, orig_timeout, watch_interval,
batctl_debug_tables[debug_table].header_lines);
While playing with your patch I noticed a couple of things:
- 'batctl originators -i eth0' is equivalent to 'batctl -m eth0
originators'
- the latter works even without your patch
Both is true, because the originators file is at the same position (eth0/originators instead of bat0/originators).
- the orig table output does not say which interface we are looking at but
always reports: (bat0 BATMAN_IV)
Yes, check the whole first line: bat0/originators: [B.A.T.M.A.N. adv master-b82b9b2, MainIF/MAC: eth0/fe:f0:00:00:02:01 (bat0 BATMAN_IV)] eth0/originators: [B.A.T.M.A.N. adv master-b82b9b2, IF/MAC: eth0/fe:f0:00:00:02:01 (bat0 BATMAN_IV)] eth1/originators: [B.A.T.M.A.N. adv master-b82b9b2, IF/MAC: eth1/fe:f1:00:00:02:01 (bat0 BATMAN_IV)]
- /sys/kernel/debug/batman_adv/ contains all sorts of hard-interfaces on
my test setup even if they are not used by batman-adv - is the intended ?
Yes. Like the for the sysfs, a folder is created for every interface even if not used - creating/removing on the fly would bring us a lot of locking fun which I wanted to avoid (I think we have discussed that when the batman-adv patches came in).
Cheers, Simon
b.a.t.m.a.n@lists.open-mesh.org