diff options
author | Steven Rostedt (Google) <rostedt@goodmis.org> | 2022-02-01 19:02:06 -0500 |
---|---|---|
committer | Steven Rostedt (Google) <rostedt@goodmis.org> | 2022-02-01 19:02:06 -0500 |
commit | 14003545bca64d270621caad2f565bd224a10e1b (patch) | |
tree | d2676fb81fce56478925e2de6092bbcf1edbae08 | |
parent | 360f786918feace4484ed11e5d9311c6f1feb0d1 (diff) | |
download | ktrace-14003545bca64d270621caad2f565bd224a10e1b.tar.gz |
ktrace: Add disable tracing and events
Add the disable command to disable tracing and events just like the enable
command works.
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-rw-r--r-- | src/enable.c | 92 | ||||
-rw-r--r-- | src/ktrace.c | 3 | ||||
-rw-r--r-- | src/ktrace.h | 6 |
3 files changed, 101 insertions, 0 deletions
diff --git a/src/enable.c b/src/enable.c index 3187135..d670ccf 100644 --- a/src/enable.c +++ b/src/enable.c @@ -10,6 +10,12 @@ static void enable_usage(struct ccli *ccli) " <type> : tracing, event\n"); } +static void disable_usage(struct ccli *ccli) +{ + ccli_printf(ccli, "usage: disable <type> <type-command>\n" + " <type> : tracing, event\n"); +} + static int enable_tracing(struct ccli *ccli, void *data, int argc, char **argv) { @@ -17,6 +23,13 @@ static int enable_tracing(struct ccli *ccli, void *data, return 0; } +static int disable_tracing(struct ccli *ccli, void *data, + int argc, char **argv) +{ + ccli_printf(ccli, "# echo 0 > %s/tracing_on\n", tracefs_tracing_dir()); + return 0; +} + static char *get_event(struct ccli *ccli, void *data, char *ename) { struct tep_handle *tep = data; @@ -53,6 +66,23 @@ static int enable_event(struct ccli *ccli, void *data, return 0; } +static int disable_event(struct ccli *ccli, void *data, + int argc, char **argv) +{ + char *file; + + if (argc < 1) { + ccli_printf(ccli, "usage: enable event system/event\n"); + return 0; + } + + file = get_event(ccli, data, argv[0]); + if (file) + ccli_printf(ccli, "# echo 0 > %s\n", file); + tracefs_put_tracing_file(file); + return 0; +} + int cmd_enable(struct ccli *ccli, const char *command, const char *line, void *data, int argc, char **argv) { @@ -72,6 +102,25 @@ int cmd_enable(struct ccli *ccli, const char *command, const char *line, return 0; } +int cmd_disable(struct ccli *ccli, const char *command, const char *line, + void *data, int argc, char **argv) +{ + if (argc < 2) { + disable_usage(ccli); + return 0; + } + + if (strcmp(argv[1], "tracing") == 0) + return disable_tracing(ccli, data, argc - 2, argv + 2); + + if (strcmp(argv[1], "event") == 0) + return disable_event(ccli, data, argc - 2, argv + 2); + + enable_usage(ccli); + + return 0; +} + static int enable_event_completion(struct ccli *ccli, void *data, int argc, char **argv, char ***list, int word, char *match) @@ -84,6 +133,18 @@ static int enable_event_completion(struct ccli *ccli, void *data, return 0; } +static int disable_event_completion(struct ccli *ccli, void *data, + int argc, char **argv, + char ***list, int word, char *match) +{ + struct tep_handle *tep = data; + + if (word == 0) + return event_completion(ccli, tep, list, match, 0); + + return 0; +} + int enable_completion(struct ccli *ccli, const char *command, const char *line, int word, char *match, char ***list, void *data) @@ -113,3 +174,34 @@ int enable_completion(struct ccli *ccli, const char *command, return ret; } + + +int disable_completion(struct ccli *ccli, const char *command, + const char *line, int word, + char *match, char ***list, void *data) +{ + char *types[] = { "tracing", "event" }; + char **argv; + int argc; + int cnt = 0; + int ret = 0; + int i; + + if (word == 1) { + for (i = 0; ret >= 0 && i < ARRAY_SIZE(types); i++) + ret = ccli_list_add(ccli, list, &cnt, types[i]); + return ret; + } + + argc = ccli_line_parse(line, &argv); + if (argc < 0) + return 0; + + if (strcmp(argv[1], "event") == 0) + ret = disable_event_completion(ccli, data, argc - 2, argv + 2, + list, word - 2, match); + + ccli_argv_free(argv); + + return ret; +} diff --git a/src/ktrace.c b/src/ktrace.c index 62ae831..3be95bb 100644 --- a/src/ktrace.c +++ b/src/ktrace.c @@ -112,6 +112,9 @@ int main (int argc, char **argv) ccli_register_command(ccli, "enable", cmd_enable, tep); ccli_register_completion(ccli, "enable", enable_completion); + ccli_register_command(ccli, "disable", cmd_disable, tep); + ccli_register_completion(ccli, "disable", disable_completion); + ccli_loop(ccli); save_history(ccli); diff --git a/src/ktrace.h b/src/ktrace.h index ef2e490..27fab9a 100644 --- a/src/ktrace.h +++ b/src/ktrace.h @@ -24,6 +24,12 @@ int enable_completion(struct ccli *ccli, const char *command, int cmd_enable(struct ccli *ccli, const char *command, const char *line, void *data, int argc, char **argv); +int disable_completion(struct ccli *ccli, const char *command, + const char *line, int word, + char *match, char ***list, void *data); +int cmd_disable(struct ccli *ccli, const char *command, const char *line, + void *data, int argc, char **argv); + struct tep_event *find_event(struct tep_handle *tep, char *ename); int event_completion(struct ccli *ccli, struct tep_handle *tep, |