A commit in batman-adv has added a second header line to the local translation table output.
Introduced by 59cb0861498776c62bd17584c31f34477fa301a0 ("batman-adv: improve local translation table output")
Signed-off-by: Linus Lüssing linus.luessing@web.de --- debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/debug.c b/debug.c index d57324d..6836857 100644 --- a/debug.c +++ b/debug.c @@ -45,7 +45,7 @@ const struct debug_table_data batctl_debug_tables[BATCTL_TABLE_NUM] = { .opt_long = "translocal", .opt_short = "tl", .debugfs_name = "transtable_local", - .header_lines = 1, + .header_lines = 2, }, { .opt_long = "transglobal",
This patch adds a switch for the new multicast_mode setting in batman-adv.
Signed-off-by: Linus Lüssing linus.luessing@web.de --- README | 7 +++++++ man/batctl.8 | 4 ++++ sys.c | 6 ++++++ sys.h | 1 + 4 files changed, 18 insertions(+)
diff --git a/README b/README index 5af95c8..69c7a07 100644 --- a/README +++ b/README @@ -392,6 +392,13 @@ Usage: batctl network_coding|nc [0|1]
Note that network coding requires a working promiscuous mode on all interfaces.
+batctl multicast_mode +===================== + +display or modify the multicast mode setting + +Usage: batctl multicast_mode|mm [0|1] + batctl aggregation ==================
diff --git a/man/batctl.8 b/man/batctl.8 index 2fe5941..a8e8868 100644 --- a/man/batctl.8 +++ b/man/batctl.8 @@ -88,6 +88,10 @@ disable fragmentation. If no parameter is given the current network coding mode setting is displayed. Otherwise the parameter is used to enable or disable network coding. .br +.IP "\fBmulticast_mode\fP|\fBmm\fP [\fB0\fP|\fB1\fP]" +If no parameter is given the current multicast mode setting is displayed. Otherwise the parameter is used to enable or +disable multicast optimizations (i.e. disabling means always sending own multicast frames via classic flooding). +.br .IP "\fBloglevel\fP|\fBll\fP [\fBlevel\fP[ \fBlevel\fP[ \fBlevel\fP]] \fB...\fP]" If no parameter is given the current log level settings are displayed otherwise the parameter(s) is/are used to set the log level. Level 'none' disables all verbose logging. Level 'batman' enables messages related to routing / flooding / broadcasting. diff --git a/sys.c b/sys.c index 5cebf52..45fb656 100644 --- a/sys.c +++ b/sys.c @@ -96,6 +96,12 @@ const struct settings_data batctl_settings[BATCTL_SETTINGS_NUM] = { .opt_short = "nc", .sysfs_name = "network_coding", .params = sysfs_param_enable, + }, + { + .opt_long = "multicast_mode", + .opt_short = "mm", + .sysfs_name = "multicast_mode", + .params = sysfs_param_enable, }
}; diff --git a/sys.h b/sys.h index 2cbbcfb..9016501 100644 --- a/sys.h +++ b/sys.h @@ -46,6 +46,7 @@ enum batctl_settings_list { BATCTL_SETTINGS_BONDING, BATCTL_SETTINGS_FRAGMENTATION, BATCTL_SETTINGS_NETWORK_CODING, + BATCTL_SETTINGS_MULTICAST_MODE, BATCTL_SETTINGS_NUM, };
This patch adds the new "-u" and "-m" options for the local and global translation table output to only display announced unicast or multicast mac addresses to enhance readability.
Signed-off-by: Linus Lüssing linus.luessing@web.de --- debug.c | 27 ++++++++++++++++++++++++++- functions.c | 16 ++++++++++++++++ functions.h | 2 ++ man/batctl.8 | 2 ++ 4 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/debug.c b/debug.c index 6836857..b8f9a07 100644 --- a/debug.c +++ b/debug.c @@ -91,6 +91,11 @@ static void debug_table_usage(int debug_table)
if (debug_table == BATCTL_TABLE_ORIGINATORS) fprintf(stderr, " \t -t timeout interval - don't print originators not seen for x.y seconds \n"); + if (debug_table == BATCTL_TABLE_TRANSLOCAL || + debug_table == BATCTL_TABLE_TRANSGLOBAL) { + fprintf(stderr, " \t -u print unicast mac addresses only\n"); + fprintf(stderr, " \t -m print multicast mac addresses only\n"); + } }
int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) @@ -102,7 +107,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:H")) != -1) { + while ((optchar = getopt(argc, argv, "hnw:t:Hum")) != -1) { switch (optchar) { case 'h': debug_table_usage(debug_table); @@ -138,6 +143,26 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) case 'H': read_opt |= SKIP_HEADER; break; + case 'u': + if (debug_table != BATCTL_TABLE_TRANSLOCAL && + debug_table != BATCTL_TABLE_TRANSGLOBAL) { + fprintf(stderr, "Error - unrecognised option '-%c'\n", optchar); + debug_table_usage(debug_table); + return EXIT_FAILURE; + } + + read_opt |= UNICAST_ONLY; + break; + case 'm': + if (debug_table != BATCTL_TABLE_TRANSLOCAL && + debug_table != BATCTL_TABLE_TRANSGLOBAL) { + fprintf(stderr, "Error - unrecognised option '-%c'\n", optchar); + debug_table_usage(debug_table); + return EXIT_FAILURE; + } + + read_opt |= MULTICAST_ONLY; + break; case '?': if (optopt == 't') fprintf(stderr, "Error - option '-t' needs a number as argument\n"); diff --git a/functions.c b/functions.c index 36804bd..41eabb2 100644 --- a/functions.c +++ b/functions.c @@ -224,6 +224,22 @@ read: && (last_seen > orig_timeout)) continue;
+ /* translation table: skip multicast */ + if (line > header_lines && + read_opt & UNICAST_ONLY && + strlen(line_ptr) > strlen(" * xx:xx:xx:") && + (!strncmp(line_ptr+3, "33:33:", strlen("33:33:")) || + !strncmp(line_ptr+3, "01:00:5e:", strlen("01:00:5e:")))) + continue; + + /* translation table: skip unicast */ + if (line > header_lines && + read_opt & MULTICAST_ONLY && + strlen(line_ptr) > strlen(" * xx:xx:xx:") && + strncmp(line_ptr+3, "33:33:", strlen("33:33:")) && + strncmp(line_ptr+3, "01:00:5e:", strlen("01:00:5e:"))) + continue; + if (!(read_opt & USE_BAT_HOSTS)) { printf("%s", line_ptr); continue; diff --git a/functions.h b/functions.h index 14ba525..43c3d9c 100644 --- a/functions.h +++ b/functions.h @@ -57,6 +57,8 @@ enum { NO_OLD_ORIGS = 0x40, COMPAT_FILTER = 0x80, SKIP_HEADER = 0x100, + UNICAST_ONLY = 0x200, + MULTICAST_ONLY = 0x400, };
#endif diff --git a/man/batctl.8 b/man/batctl.8 index a8e8868..6b43d5e 100644 --- a/man/batctl.8 +++ b/man/batctl.8 @@ -178,6 +178,8 @@ All of the debug tables support the following options: The originator table also supports the "-t" filter option to remove all originators from the output that have not been seen for the specified amount of seconds (with optional decimal places).
+The local and global translation tables also support the "-u" and "-m" option to only display unicast or multicast translation table announcements respectively. + List of debug tables: .RS 10 - originators|o
On 24/02/14 05:11, Linus Lüssing wrote:
@@ -138,6 +143,26 @@ int handle_debug_table(char *mesh_iface, int debug_table, int argc, char **argv) case 'H': read_opt |= SKIP_HEADER; break;
case 'u':
if (debug_table != BATCTL_TABLE_TRANSLOCAL &&
debug_table != BATCTL_TABLE_TRANSGLOBAL) {
fprintf(stderr, "Error - unrecognised option '-%c'\n", optchar);
debug_table_usage(debug_table);
return EXIT_FAILURE;
}
read_opt |= UNICAST_ONLY;
break;
case 'm':
if (debug_table != BATCTL_TABLE_TRANSLOCAL &&
debug_table != BATCTL_TABLE_TRANSGLOBAL) {
fprintf(stderr, "Error - unrecognised option '-%c'\n", optchar);
debug_table_usage(debug_table);
return EXIT_FAILURE;
}
read_opt |= MULTICAST_ONLY;
break;
do we really want to allow the user to specify both flags? Or should we throw an error in that case? I think the second option would be better, no?
case '?': if (optopt == 't') fprintf(stderr, "Error - option '-t' needs a number as argument\n");
diff --git a/functions.c b/functions.c index 36804bd..41eabb2 100644 --- a/functions.c +++ b/functions.c @@ -224,6 +224,22 @@ read: && (last_seen > orig_timeout)) continue;
/* translation table: skip multicast */
if (line > header_lines &&
read_opt & UNICAST_ONLY &&
strlen(line_ptr) > strlen(" * xx:xx:xx:") &&
(!strncmp(line_ptr+3, "33:33:", strlen("33:33:")) ||
!strncmp(line_ptr+3, "01:00:5e:", strlen("01:00:5e:"))))
continue;
/* translation table: skip unicast */
if (line > header_lines &&
read_opt & MULTICAST_ONLY &&
strlen(line_ptr) > strlen(" * xx:xx:xx:") &&
strncmp(line_ptr+3, "33:33:", strlen("33:33:")) &&
strncmp(line_ptr+3, "01:00:5e:", strlen("01:00:5e:")))
continue;
why not just converting to an integer the first octect of the MAC address and checking for the multicast bit being set or not? Wouldn't that be more elegant and generic?
Cheers,
On 24/02/14 05:11, Linus Lüssing wrote:
A commit in batman-adv has added a second header line to the local translation table output.
Introduced by 59cb0861498776c62bd17584c31f34477fa301a0 ("batman-adv: improve local translation table output")
Signed-off-by: Linus Lüssing linus.luessing@web.de
Nice catch! I think we should use the "-H" option a bit more often :)
Acked-by: Antonio Quartulli antonio@meshcoding.com
b.a.t.m.a.n@lists.open-mesh.org