Repository : ssh://git@open-mesh.org/batctl
On branch : master
commit 9820b386612b238928d2c27748c29abfe0bd158d Author: Sven Eckelmann sven@narfation.org Date: Sun Oct 14 22:20:54 2012 +0200
batctl: Allow to skip header in debug table output
Signed-off-by: Sven Eckelmann sven@narfation.org Signed-off-by: Marek Lindner lindner_marek@yahoo.de
9820b386612b238928d2c27748c29abfe0bd158d debug.c | 18 +++++++++++++++--- debug.h | 1 + functions.c | 7 ++++++- functions.h | 3 ++- main.c | 2 +- man/batctl.8 | 3 +++ sys.c | 14 +++++++------- 7 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/debug.c b/debug.c index a230a12..260448b 100644 --- a/debug.c +++ b/debug.c @@ -38,36 +38,43 @@ const struct debug_table_data batctl_debug_tables[BATCTL_TABLE_NUM] = { .opt_long = "originators", .opt_short = "o", .debugfs_name = "originators", + .header_lines = 2, }, { .opt_long = "gateways", .opt_short = "gwl", .debugfs_name = "gateways", + .header_lines = 1, }, { .opt_long = "translocal", .opt_short = "tl", .debugfs_name = "transtable_local", + .header_lines = 1, }, { .opt_long = "transglobal", .opt_short = "tg", .debugfs_name = "transtable_global", + .header_lines = 2, }, { .opt_long = "claimtable", .opt_short = "cl", .debugfs_name = "bla_claim_table", + .header_lines = 2, }, { .opt_long = "backbonetable", .opt_short = "bbt", .debugfs_name = "bla_backbone_table", + .header_lines = 2, }, { .opt_long = "dat_cache", .opt_short = "dc", .debugfs_name = "dat_cache", + .header_lines = 2, }, };
@@ -78,6 +85,7 @@ void debug_table_usage(int debug_table) printf("parameters:\n"); printf(" \t -h print this help\n"); printf(" \t -n don't replace mac addresses with bat-host names\n"); + printf(" \t -H don't show the header\n"); printf(" \t -w [interval] watch mode - refresh the table continuously\n");
if (debug_table == BATCTL_TABLE_ORIGINATORS) @@ -93,7 +101,7 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) float watch_interval = 1; opterr = 0;
- while ((optchar = getopt(argc, argv, "hnw:t:")) != -1) { + while ((optchar = getopt(argc, argv, "hnw:t:H")) != -1) { switch (optchar) { case 'h': debug_table_usage(debug_table); @@ -126,6 +134,9 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) return EXIT_FAILURE; } break; + case 'H': + read_opt |= SKIP_HEADER; + break; case '?': if (optopt == 't') printf("Error - option '-t' needs a number as argument\n"); @@ -152,7 +163,8 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv)
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); + read_opt, orig_timeout, watch_interval, + batctl_debug_tables[debug_table].header_lines); }
static void log_usage(void) @@ -190,6 +202,6 @@ int log_print(char *mesh_iface, int argc, char **argv) }
debugfs_make_path(DEBUG_BATIF_PATH_FMT "/", mesh_iface, full_path, sizeof(full_path)); - res = read_file(full_path, DEBUG_LOG, read_opt, 0, 0); + res = read_file(full_path, DEBUG_LOG, read_opt, 0, 0, 0); return res; } diff --git a/debug.h b/debug.h index 5bd7f3e..3fa2830 100644 --- a/debug.h +++ b/debug.h @@ -40,6 +40,7 @@ struct debug_table_data { const char opt_long[OPT_LONG_MAX_LEN]; const char opt_short[OPT_SHORT_MAX_LEN]; const char debugfs_name[DEBUG_TABLE_PATH_MAX_LEN]; + size_t header_lines; };
extern const struct debug_table_data batctl_debug_tables[BATCTL_TABLE_NUM]; diff --git a/functions.c b/functions.c index a500444..57c2bba 100644 --- a/functions.c +++ b/functions.c @@ -162,7 +162,7 @@ static void file_open_problem_dbg(char *dir, char *fname, char *full_path) }
int read_file(char *dir, char *fname, int read_opt, - float orig_timeout, float watch_interval) + float orig_timeout, float watch_interval, size_t header_lines) { struct ether_addr *mac_addr; struct bat_host *bat_host; @@ -171,6 +171,7 @@ int read_file(char *dir, char *fname, int read_opt, char full_path[500], *buff_ptr, *space_ptr, extra_char; size_t len = 0; FILE *fp = NULL; + size_t line;
if (read_opt & USE_BAT_HOSTS) bat_hosts_init(read_opt); @@ -180,6 +181,7 @@ int read_file(char *dir, char *fname, int read_opt, strncat(full_path, fname, sizeof(full_path) - strlen(full_path));
open: + line = 0; fp = fopen(full_path, "r");
if (!fp) { @@ -195,6 +197,9 @@ open:
read: while (getline(&line_ptr, &len, fp) != -1) { + if (line++ < header_lines && read_opt & SKIP_HEADER) + continue; + /* the buffer will be handled elsewhere */ if (read_opt & USE_READ_BUFF) break; diff --git a/functions.h b/functions.h index 0ec1d1a..6e427f4 100644 --- a/functions.h +++ b/functions.h @@ -35,7 +35,7 @@ char *get_name_by_macaddr(struct ether_addr *mac_addr, int read_opt); char *get_name_by_macstr(char *mac_str, int read_opt); int file_exists(const char *fpath); int read_file(char *dir, char *path, int read_opt, - float orig_timeout, float watch_interval); + float orig_timeout, float watch_interval, size_t header_lines); int write_file(char *dir, char *fname, char *arg1, char *arg2); struct ether_addr *translate_mac(char *mesh_iface, struct ether_addr *mac); struct ether_addr *resolve_mac(const char *asc); @@ -52,4 +52,5 @@ enum { SILENCE_ERRORS = 0x20, NO_OLD_ORIGS = 0x40, COMPAT_FILTER = 0x80, + SKIP_HEADER = 0x100, }; diff --git a/main.c b/main.c index 01a435b..647818d 100644 --- a/main.c +++ b/main.c @@ -118,7 +118,7 @@ int main(int argc, char **argv) if (strcmp(argv[1], "-v") == 0) { printf("batctl %s [batman-adv: ", SOURCE_VERSION);
- ret = read_file("", module_ver_path, USE_READ_BUFF | SILENCE_ERRORS, 0, 0); + ret = read_file("", module_ver_path, USE_READ_BUFF | SILENCE_ERRORS, 0, 0, 0); if ((line_ptr) && (line_ptr[strlen(line_ptr) - 1] == '\n')) line_ptr[strlen(line_ptr) - 1] = '\0';
diff --git a/man/batctl.8 b/man/batctl.8 index 804682e..feb1a17 100644 --- a/man/batctl.8 +++ b/man/batctl.8 @@ -168,6 +168,9 @@ All of the debug tables support the following options: .RS 10 -n do not replace the MAC addresses with bat-host names in the output .RE +.RS 10 +-H do not show the header of the debug table +.RE
.RS 7 The originator table also supports the "-t" filter option to remove all originators from the output that have not been seen diff --git a/sys.c b/sys.c index 3d5e129..9591416 100644 --- a/sys.c +++ b/sys.c @@ -136,7 +136,7 @@ static int print_interfaces(char *mesh_iface)
while ((iface_dir = readdir(iface_base_dir)) != NULL) { snprintf(path_buff, PATH_BUFF_LEN, SYS_MESH_IFACE_FMT, iface_dir->d_name); - res = read_file("", path_buff, USE_READ_BUFF | SILENCE_ERRORS, 0, 0); + res = read_file("", path_buff, USE_READ_BUFF | SILENCE_ERRORS, 0, 0, 0); if (res != EXIT_SUCCESS) continue;
@@ -153,7 +153,7 @@ static int print_interfaces(char *mesh_iface) line_ptr = NULL;
snprintf(path_buff, PATH_BUFF_LEN, SYS_IFACE_STATUS_FMT, iface_dir->d_name); - res = read_file("", path_buff, USE_READ_BUFF | SILENCE_ERRORS, 0, 0); + res = read_file("", path_buff, USE_READ_BUFF | SILENCE_ERRORS, 0, 0, 0); if (res != EXIT_SUCCESS) { printf("<error reading status>\n"); continue; @@ -318,7 +318,7 @@ int handle_loglevel(char *mesh_iface, int argc, char **argv) goto out; }
- res = read_file(path_buff, SYS_LOG_LEVEL, USE_READ_BUFF, 0, 0); + res = read_file(path_buff, SYS_LOG_LEVEL, USE_READ_BUFF, 0, 0, 0);
if (res != EXIT_SUCCESS) goto out; @@ -382,7 +382,7 @@ int handle_sys_setting(char *mesh_iface, int setting, int argc, char **argv)
if (argc == 1) { res = read_file(path_buff, (char *)batctl_settings[setting].sysfs_name, - NO_FLAGS, 0, 0); + NO_FLAGS, 0, 0, 0); goto out; }
@@ -445,7 +445,7 @@ int handle_gw_setting(char *mesh_iface, int argc, char **argv) snprintf(path_buff, PATH_BUFF_LEN, SYS_BATIF_PATH_FMT, mesh_iface);
if (argc == 1) { - res = read_file(path_buff, SYS_GW_MODE, USE_READ_BUFF, 0, 0); + res = read_file(path_buff, SYS_GW_MODE, USE_READ_BUFF, 0, 0, 0);
if (res != EXIT_SUCCESS) goto out; @@ -465,10 +465,10 @@ int handle_gw_setting(char *mesh_iface, int argc, char **argv)
switch (gw_mode) { case GW_MODE_CLIENT: - res = read_file(path_buff, SYS_GW_SEL, USE_READ_BUFF, 0, 0); + res = read_file(path_buff, SYS_GW_SEL, USE_READ_BUFF, 0, 0, 0); break; case GW_MODE_SERVER: - res = read_file(path_buff, SYS_GW_BW, USE_READ_BUFF, 0, 0); + res = read_file(path_buff, SYS_GW_BW, USE_READ_BUFF, 0, 0, 0); break; default: printf("off\n");