Implement support for lttng-modules syscall filtering
[lttng-tools.git] / src / bin / lttng / commands / disable_events.c
index 7972d90a0762b1029354cf8ec84fa7add18decc5..1ce687aa422aebc2eb96e76e348b4552d3fdd565 100644 (file)
@@ -37,6 +37,7 @@ static int opt_userspace;
 static int opt_disable_all;
 static int opt_jul;
 static int opt_log4j;
+static int opt_event_type;
 #if 0
 /* Not implemented yet */
 static char *opt_cmd_name;
@@ -46,6 +47,7 @@ static pid_t opt_pid;
 enum {
        OPT_HELP = 1,
        OPT_USERSPACE,
+       OPT_SYSCALL,
        OPT_LIST_OPTIONS,
 };
 
@@ -61,6 +63,7 @@ static struct poptOption long_options[] = {
        {"jul",            'j', POPT_ARG_VAL, &opt_jul, 1, 0, 0},
        {"log4j",          'l', POPT_ARG_VAL, &opt_log4j, 1, 0, 0},
        {"kernel",         'k', POPT_ARG_VAL, &opt_kernel, 1, 0, 0},
+       {"syscall",        0,   POPT_ARG_NONE, 0, OPT_SYSCALL, 0, 0},
 #if 0
        /* Not implemented yet */
        {"userspace",      'u', POPT_ARG_STRING | POPT_ARGFLAG_OPTIONAL, &opt_cmd_name, OPT_USERSPACE, 0, 0},
@@ -90,6 +93,9 @@ static void usage(FILE *ofp)
        fprintf(ofp, "  -j, --jul                Apply for Java application using JUL\n");
        fprintf(ofp, "  -l, --log4j              Apply to Java application using LOG4j\n");
        fprintf(ofp, "\n");
+       fprintf(ofp, "Event options:\n");
+       fprintf(ofp, "      --syscall            System call event\n");
+       fprintf(ofp, "\n");
 }
 
 static
@@ -159,6 +165,7 @@ static int disable_events(char *session_name)
        int enabled = 1, success = 1;
        char *event_name, *channel_name = NULL;
        struct lttng_domain dom;
+       struct lttng_event event;
 
        memset(&dom, 0, sizeof(dom));
 
@@ -208,8 +215,18 @@ static int disable_events(char *session_name)
                }
        }
 
+       memset(&event, 0, sizeof(event));
+       switch (opt_event_type) {
+       case LTTNG_EVENT_SYSCALL:
+               event.type = LTTNG_EVENT_SYSCALL;
+               break;
+       default:
+               event.type = LTTNG_EVENT_ALL;
+               break;
+       }
+
        if (opt_disable_all) {
-               command_ret = lttng_disable_event(handle, NULL, channel_name);
+               command_ret = lttng_disable_event_ext(handle, &event, channel_name, NULL);
                if (command_ret < 0) {
                        ERR("%s", lttng_strerror(command_ret));
                        enabled = 1;
@@ -218,8 +235,10 @@ static int disable_events(char *session_name)
                } else {
                        enabled = 0;
                        success = 1;
-                       MSG("All %s events are disabled in channel %s",
-                                       get_domain_str(dom.type), print_channel_name(channel_name));
+                       MSG("All %s %s are disabled in channel %s",
+                                       get_domain_str(dom.type),
+                                       opt_event_type == LTTNG_EVENT_SYSCALL ? "system calls" : "events",
+                                       print_channel_name(channel_name));
                }
 
                if (lttng_opt_mi) {
@@ -235,9 +254,13 @@ static int disable_events(char *session_name)
                while (event_name != NULL) {
                        DBG("Disabling event %s", event_name);
 
-                       command_ret = lttng_disable_event(handle, event_name, channel_name);
+                       strncpy(event.name, event_name, sizeof(event.name));
+                       event.name[sizeof(event.name) - 1] = '\0';
+                       command_ret = lttng_disable_event_ext(handle, &event, channel_name, NULL);
                        if (command_ret < 0) {
-                               ERR("Event %s: %s (channel %s, session %s)", event_name,
+                               ERR("%s %s: %s (channel %s, session %s)",
+                                               opt_event_type == LTTNG_EVENT_SYSCALL ? "System call" : "Event",
+                                               event_name,
                                                lttng_strerror(command_ret),
                                                command_ret == -LTTNG_ERR_NEED_CHANNEL_NAME
                                                        ? print_raw_channel_name(channel_name)
@@ -246,13 +269,15 @@ static int disable_events(char *session_name)
                                warn = 1;
                                success = 0;
                                /*
-                                * If an error occurred we assume that
-                                * the event is still enabled.
+                                * If an error occurred we assume that the event is still
+                                * enabled.
                                 */
                                enabled = 1;
                        } else {
-                               MSG("%s event %s disabled in channel %s for session %s",
-                                               get_domain_str(dom.type), event_name,
+                               MSG("%s %s %s disabled in channel %s for session %s",
+                                               get_domain_str(dom.type),
+                                               opt_event_type == LTTNG_EVENT_SYSCALL ? "system call" : "event",
+                                               event_name,
                                                print_channel_name(channel_name),
                                                session_name);
                                success = 1;
@@ -303,10 +328,14 @@ int cmd_disable_events(int argc, const char **argv)
        int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
        static poptContext pc;
        char *session_name = NULL;
+       int event_type = -1;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
        poptReadDefaultConfig(pc, 0);
 
+       /* Default event type */
+       opt_event_type = LTTNG_EVENT_ALL;
+
        while ((opt = poptGetNextOpt(pc)) != -1) {
                switch (opt) {
                case OPT_HELP:
@@ -315,6 +344,9 @@ int cmd_disable_events(int argc, const char **argv)
                case OPT_USERSPACE:
                        opt_userspace = 1;
                        break;
+               case OPT_SYSCALL:
+                       opt_event_type = LTTNG_EVENT_SYSCALL;
+                       break;
                case OPT_LIST_OPTIONS:
                        list_cmd_options(stdout, long_options);
                        goto end;
@@ -323,6 +355,17 @@ int cmd_disable_events(int argc, const char **argv)
                        ret = CMD_UNDEFINED;
                        goto end;
                }
+
+               /* Validate event type. Multiple event type are not supported. */
+               if (event_type == -1) {
+                       event_type = opt_event_type;
+               } else {
+                       if (event_type != opt_event_type) {
+                               ERR("Multiple event type not supported.");
+                               ret = CMD_ERROR;
+                               goto end;
+                       }
+               }
        }
 
        opt_event_list = (char*) poptGetArg(pc);
This page took 0.024451 seconds and 4 git commands to generate.