Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
---
debug.c | 20 +++++++++++++++++---
debug.h | 1 +
functions.c | 9 ++++++++-
functions.h | 3 ++-
main.c | 2 +-
man/batctl.8 | 3 +++
sys.c | 14 +++++++-------
7 files changed, 39 insertions(+), 13 deletions(-)
diff --git a/debug.c b/debug.c
index 9b5146f..9d6ddfc 100644
--- a/debug.c
+++ b/debug.c
@@ -38,31 +38,37 @@ 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,
},
};
@@ -73,6 +79,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)
@@ -86,9 +93,10 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv)
char *debugfs_mnt;
float orig_timeout;
float watch_interval = 1;
+ size_t skip_lines = 0;
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);
@@ -121,6 +129,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");
@@ -145,9 +156,12 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv)
return EXIT_FAILURE;
}
+ if (read_opt & SKIP_HEADER)
+ skip_lines = batctl_debug_tables[debug_table].header_lines;
+
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, skip_lines);
}
static void log_usage(void)
@@ -185,6 +199,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 cd9dce0..6580848 100644
--- a/debug.h
+++ b/debug.h
@@ -39,6 +39,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 7bec322..15fe290 100644
--- a/functions.c
+++ b/functions.c
@@ -160,7 +160,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 skip_lines)
{
struct ether_addr *mac_addr;
struct bat_host *bat_host;
@@ -169,6 +169,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);
@@ -178,6 +179,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) {
@@ -193,6 +195,11 @@ open:
read:
while (getline(&line_ptr, &len, fp) != -1) {
+ if (line < skip_lines) {
+ line++;
+ continue;
+ }
+
/* the buffer will be handled elsewhere */
if (read_opt & USE_READ_BUFF)
break;
diff --git a/functions.h b/functions.h
index 0ec1d1a..fe0011b 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 skip_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 234171f..f8dc99d 100644
--- a/man/batctl.8
+++ b/man/batctl.8
@@ -163,6 +163,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 6f94483..b046164 100644
--- a/sys.c
+++ b/sys.c
@@ -130,7 +130,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;
@@ -147,7 +147,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;
@@ -309,7 +309,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;
@@ -371,7 +371,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;
}
@@ -434,7 +434,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;
@@ -454,10 +454,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");
--
1.7.10.4