Author: marek Date: 2010-03-11 20:19:01 +0100 (Thu, 11 Mar 2010) New Revision: 1595
Modified: trunk/batctl/functions.c trunk/batctl/functions.h trunk/batctl/main.c trunk/batctl/proc.c trunk/batctl/proc.h trunk/batctl/sys.c trunk/batctl/sys.h Log: batctl: follow /proc to sysfs conversion & introduce input validation
batman-adv is in the process of migrating to sysfs, hence batctl needs to adapt the file paths. In addition batctl makes use of the input validation support of the new files in sysfs.
Signed-off-by: Marek Lindner lindner_marek@yahoo.de
Modified: trunk/batctl/functions.c =================================================================== --- trunk/batctl/functions.c 2010-03-11 19:18:53 UTC (rev 1594) +++ trunk/batctl/functions.c 2010-03-11 19:19:01 UTC (rev 1595) @@ -36,8 +36,6 @@ #include "functions.h" #include "bat-hosts.h"
-#define BATMAN_ADV_TAG "batman-adv:" - static struct timeval start_time; static char *host_name; char *line_ptr = NULL; @@ -175,7 +173,14 @@
read: while ((read = getline(&line_ptr, &len, fp)) != -1) { + if (read_opt & SEARCH_ARGS) { + /* omit log lines which don't start with the correct tag */ + if (strncmp(line_ptr, SEARCH_ARGS_TAG, strlen(SEARCH_ARGS_TAG)) == 0) + break;
+ continue; + } + /* the buffer will be handled elsewhere */ if (read_opt & USE_READ_BUFF) break;
Modified: trunk/batctl/functions.h =================================================================== --- trunk/batctl/functions.h 2010-03-11 19:18:53 UTC (rev 1594) +++ trunk/batctl/functions.h 2010-03-11 19:19:01 UTC (rev 1595) @@ -25,6 +25,8 @@
#define ETH_STR_LEN 17 +#define BATMAN_ADV_TAG "batman-adv:" +#define SEARCH_ARGS_TAG "commands:"
/* return time delta from start to end in milliseconds */ void start_timer(void); @@ -45,4 +47,5 @@ USE_BAT_HOSTS = 0x04, LOG_MODE = 0x08, USE_READ_BUFF = 0x10, + SEARCH_ARGS = 0x20, };
Modified: trunk/batctl/main.c =================================================================== --- trunk/batctl/main.c 2010-03-11 19:18:53 UTC (rev 1594) +++ trunk/batctl/main.c 2010-03-11 19:19:01 UTC (rev 1595) @@ -102,15 +102,15 @@
} else if ((strcmp(argv[1], "originators") == 0) || (strcmp(argv[1], "o") == 0)) {
- ret = handle_table(argc - 1, argv + 1, PROC_ORIGINATORS, originators_usage); + ret = handle_sys_table(argc - 1, argv + 1, SYS_ORIGINATORS, originators_usage);
} else if ((strcmp(argv[1], "translocal") == 0) || (strcmp(argv[1], "tl") == 0)) {
- ret = handle_table(argc - 1, argv + 1, PROC_TRANSTABLE_LOCAL, trans_local_usage); + ret = handle_sys_table(argc - 1, argv + 1, SYS_TRANSTABLE_LOCAL, trans_local_usage);
} else if ((strcmp(argv[1], "transglobal") == 0) || (strcmp(argv[1], "tg") == 0)) {
- ret = handle_table(argc - 1, argv + 1, PROC_TRANSTABLE_GLOBAL, trans_global_usage); + ret = handle_sys_table(argc - 1, argv + 1, SYS_TRANSTABLE_GLOBAL, trans_global_usage);
} else if ((strcmp(argv[1], "loglevel") == 0) || (strcmp(argv[1], "ll") == 0)) {
@@ -142,7 +142,7 @@
} else if ((strcmp(argv[1], "aggregation") == 0) || (strcmp(argv[1], "ag") == 0)) {
- ret = handle_proc_setting(argc - 1, argv + 1, PROC_AGGR, aggregation_usage); + ret = handle_sys_setting(argc - 1, argv + 1, SYS_AGGR, aggregation_usage);
} else if ((strcmp(argv[1], "bisect") == 0)) {
Modified: trunk/batctl/proc.c =================================================================== --- trunk/batctl/proc.c 2010-03-11 19:18:53 UTC (rev 1594) +++ trunk/batctl/proc.c 2010-03-11 19:19:01 UTC (rev 1595) @@ -68,33 +68,6 @@ return EXIT_SUCCESS; }
-void originators_usage(void) -{ - printf("Usage: batctl [options] originators \n"); - printf("options:\n"); - printf(" \t -h print this help\n"); - printf(" \t -n don't replace mac addresses with bat-host names\n"); - printf(" \t -w watch mode - refresh the originator table continuously\n"); -} - -void trans_local_usage(void) -{ - printf("Usage: batctl [options] translocal \n"); - printf("options:\n"); - printf(" \t -h print this help\n"); - printf(" \t -n don't replace mac addresses with bat-host names\n"); - printf(" \t -w watch mode - refresh the local translation table continuously\n"); -} - -void trans_global_usage(void) -{ - printf("Usage: batctl [options] transglobal \n"); - printf("options:\n"); - printf(" \t -h print this help\n"); - printf(" \t -n don't replace mac addresses with bat-host names\n"); - printf(" \t -w watch mode - refresh the global translation table continuously\n"); -} - void gw_srv_list_usage(void) { printf("Usage: batctl [options] gw_srv_list \n"); @@ -118,13 +91,6 @@ printf(" \t -h print this help\n"); }
-void aggregation_usage(void) -{ - printf("Usage: batctl [options] aggregation \n"); - printf("options:\n"); - printf(" \t -h print this help\n"); -} - void gw_mode_usage(void) { printf("Usage: batctl [options] gw_mode [mode]\n");
Modified: trunk/batctl/proc.h =================================================================== --- trunk/batctl/proc.h 2010-03-11 19:18:53 UTC (rev 1594) +++ trunk/batctl/proc.h 2010-03-11 19:19:01 UTC (rev 1595) @@ -21,24 +21,16 @@
#define PROC_ROOT_PATH "/proc/net/batman-adv/" #define PROC_INTERFACES "interfaces" -#define PROC_ORIGINATORS "originators" #define PROC_ORIG_INTERVAL "orig_interval" -#define PROC_TRANSTABLE_LOCAL "transtable_local" -#define PROC_TRANSTABLE_GLOBAL "transtable_global" #define PROC_VIS_SERVER "vis_server" #define PROC_VIS_DATA "vis_data" -#define PROC_AGGR "aggregate_ogm" #define PROC_GW_MODE "gateway_mode" #define PROC_GW_SRV_LIST "gateway_srv_list"
int interface(int argc, char **argv);
-void originators_usage(void); -void trans_local_usage(void); -void trans_global_usage(void); void orig_interval_usage(void); void vis_server_usage(void); -void aggregation_usage(void); void gw_mode_usage(void); void gw_srv_list_usage(void); int handle_table(int argc, char **argv, char *file_path, void table_usage(void));
Modified: trunk/batctl/sys.c =================================================================== --- trunk/batctl/sys.c 2010-03-11 19:18:53 UTC (rev 1594) +++ trunk/batctl/sys.c 2010-03-11 19:19:01 UTC (rev 1595) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * * Marek Lindner lindner_marek@yahoo.de * @@ -94,11 +94,11 @@ }
if (argc != 1) { - res = write_file(SYS_ROOT_PATH, SYS_LOG_LEVEL, argv[1]); + res = write_file(SYS_MODULE_PATH, SYS_LOG_LEVEL, argv[1]); goto out; }
- res = read_file(SYS_ROOT_PATH, SYS_LOG_LEVEL, SINGLE_READ | USE_READ_BUFF); + res = read_file(SYS_MODULE_PATH, SYS_LOG_LEVEL, SINGLE_READ | USE_READ_BUFF);
if (res != EXIT_SUCCESS) goto out; @@ -118,3 +118,120 @@
return res; } + +void originators_usage(void) +{ + printf("Usage: batctl [options] originators \n"); + printf("options:\n"); + printf(" \t -h print this help\n"); + printf(" \t -n don't replace mac addresses with bat-host names\n"); + printf(" \t -w watch mode - refresh the originator table continuously\n"); +} + +void trans_local_usage(void) +{ + printf("Usage: batctl [options] translocal \n"); + printf("options:\n"); + printf(" \t -h print this help\n"); + printf(" \t -n don't replace mac addresses with bat-host names\n"); + printf(" \t -w watch mode - refresh the local translation table continuously\n"); +} + +void trans_global_usage(void) +{ + printf("Usage: batctl [options] transglobal \n"); + printf("options:\n"); + printf(" \t -h print this help\n"); + printf(" \t -n don't replace mac addresses with bat-host names\n"); + printf(" \t -w watch mode - refresh the global translation table continuously\n"); +} + +int handle_sys_table(int argc, char **argv, char *file_path, void table_usage(void)) +{ + int optchar, read_opt = USE_BAT_HOSTS; + + while ((optchar = getopt(argc, argv, "hnw")) != -1) { + switch (optchar) { + case 'h': + table_usage(); + return EXIT_SUCCESS; + case 'n': + read_opt &= ~USE_BAT_HOSTS; + break; + case 'w': + read_opt |= CLR_CONT_READ; + break; + default: + table_usage(); + return EXIT_FAILURE; + } + } + + return read_file(SYS_BATIF_PATH, file_path, read_opt); +} + +void aggregation_usage(void) +{ + printf("Usage: batctl [options] aggregation \n"); + printf("options:\n"); + printf(" \t -h print this help\n"); +} + +int handle_sys_setting(int argc, char **argv, char *file_path, void setting_usage(void)) +{ + int optchar, res; + char *space_ptr, *comma_char, *cmds = NULL; + + while ((optchar = getopt(argc, argv, "h")) != -1) { + switch (optchar) { + case 'h': + setting_usage(); + return EXIT_SUCCESS; + default: + setting_usage(); + return EXIT_FAILURE; + } + } + + if (argc == 1) + return read_file(SYS_BATIF_PATH, file_path, SINGLE_READ); + + res = read_file(SYS_BATIF_PATH, file_path, SEARCH_ARGS); + if (res != EXIT_SUCCESS) + return res; + + while ((space_ptr = strchr(line_ptr, ' ')) != NULL) { + *space_ptr = '\0'; + + if (strncmp(line_ptr, SEARCH_ARGS_TAG, strlen(SEARCH_ARGS_TAG)) == 0) { + cmds = space_ptr + 1; + goto next; + } + + comma_char = NULL; + if (line_ptr[strlen(line_ptr) - 1] == ',') { + comma_char = line_ptr + strlen(line_ptr) - 1; + *comma_char = '\0'; + } + + if (strcmp(line_ptr, argv[1]) == 0) + goto write_file; + + *space_ptr = ' '; + if (comma_char) + *comma_char = ','; + +next: + line_ptr = space_ptr + 1; + } + + if (!cmds) + goto write_file; + + printf("Error - the supplied argument is invalid: %s\n", argv[1]); + printf("The following values are allowed: %s", cmds); + return EXIT_FAILURE; + +write_file: + return write_file(SYS_BATIF_PATH, file_path, argv[1]); +}
Modified: trunk/batctl/sys.h =================================================================== --- trunk/batctl/sys.h 2010-03-11 19:18:53 UTC (rev 1594) +++ trunk/batctl/sys.h 2010-03-11 19:19:01 UTC (rev 1595) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * * Marek Lindner lindner_marek@yahoo.de * @@ -20,10 +20,21 @@ */
-#define SYS_ROOT_PATH "/sys/module/batman_adv/" +#define SYS_MODULE_PATH "/sys/module/batman_adv/" +#define SYS_BATIF_PATH "/sys/class/net/bat0/mesh/" #define SYS_LOG_LEVEL "parameters/debug" #define SYS_LOG "log" +#define SYS_ORIGINATORS "originators" +#define SYS_TRANSTABLE_LOCAL "transtable_local" +#define SYS_TRANSTABLE_GLOBAL "transtable_global" +#define SYS_AGGR "aggregate_ogm"
- +void originators_usage(void); +void trans_local_usage(void); +void trans_global_usage(void); +void aggregation_usage(void); +void bonding_usage(void); int log_print(int argc, char **argv); int handle_loglevel(int argc, char **argv); +int handle_sys_table(int argc, char **argv, char *file_path, void table_usage(void)); +int handle_sys_setting(int argc, char **argv, char *file_path, void setting_usage(void));