X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fenable_events.c;h=3f304a0902ad398bfddacc76ba97ca6595836685;hp=860472fa9c370e8a1d934065d9c2cde54ca0975a;hb=53a80697a772bc2e260e3dff006f910be6709f04;hpb=0cd3b1d4a59305a7efb608605d2e74c0ea347383 diff --git a/src/bin/lttng/commands/enable_events.c b/src/bin/lttng/commands/enable_events.c index 860472fa9..3f304a090 100644 --- a/src/bin/lttng/commands/enable_events.c +++ b/src/bin/lttng/commands/enable_events.c @@ -41,6 +41,7 @@ static char *opt_probe; static char *opt_function; static char *opt_function_entry_symbol; static char *opt_channel_name; +static char *opt_filter; #if 0 /* Not implemented yet */ static char *opt_cmd_name; @@ -58,6 +59,7 @@ enum { OPT_LOGLEVEL, OPT_LOGLEVEL_ONLY, OPT_LIST_OPTIONS, + OPT_FILTER, }; static struct lttng_handle *handle; @@ -90,6 +92,7 @@ static struct poptOption long_options[] = { {"loglevel", 0, POPT_ARG_STRING, 0, OPT_LOGLEVEL, 0, 0}, {"loglevel-only", 0, POPT_ARG_STRING, 0, OPT_LOGLEVEL_ONLY, 0, 0}, {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, + {"filter", 'f', POPT_ARG_STRING, &opt_filter, OPT_FILTER, 0, 0}, {0, 0, 0, 0, 0, 0, 0} }; @@ -162,6 +165,9 @@ static void usage(FILE *ofp) fprintf(ofp, " TRACE_DEBUG_LINE = 13\n"); fprintf(ofp, " TRACE_DEBUG = 14\n"); fprintf(ofp, " (shortcuts such as \"system\" are allowed)\n"); + fprintf(ofp, " --filter \'expression\'\n"); + fprintf(ofp, " Filter expression on event fields,\n"); + fprintf(ofp, " event recording depends on evaluation.\n"); fprintf(ofp, "\n"); } @@ -294,6 +300,14 @@ static int enable_events(char *session_name) memset(&ev, 0, sizeof(ev)); memset(&dom, 0, sizeof(dom)); + if (opt_kernel) { + if (opt_filter) { + ERR("Filter not implement for kernel tracing yet"); + ret = CMD_ERROR; + goto error; + } + } + /* Create lttng domain */ if (opt_kernel) { dom.type = LTTNG_DOMAIN_KERNEL; @@ -350,12 +364,22 @@ static int enable_events(char *session_name) case LTTCOMM_KERN_EVENT_EXIST: WARN("Kernel events already enabled (channel %s, session %s)", channel_name, session_name); - goto end; + break; default: - ERR("Event %s: %s (channel %s, session %s)", event_name, + ERR("Events: %s (channel %s, session %s)", lttng_strerror(ret), channel_name, session_name); break; } + goto end; + } + if (opt_filter) { + ret = lttng_set_event_filter(handle, ev.name, channel_name, + opt_filter); + if (ret < 0) { + ERR("Error setting filter"); + ret = -1; + goto error; + } } switch (opt_event_type) { @@ -518,6 +542,15 @@ static int enable_events(char *session_name) MSG("%s event %s created in channel %s", opt_kernel ? "kernel": "UST", event_name, channel_name); } + if (opt_filter) { + ret = lttng_set_event_filter(handle, ev.name, + channel_name, opt_filter); + if (ret < 0) { + ERR("Error setting filter"); + ret = -1; + goto error; + } + } /* Next event */ event_name = strtok(NULL, ","); @@ -585,6 +618,8 @@ int cmd_enable_events(int argc, const char **argv) case OPT_LIST_OPTIONS: list_cmd_options(stdout, long_options); goto end; + case OPT_FILTER: + break; default: usage(stderr); ret = CMD_UNDEFINED;