Update version to 2.0-pre17
[lttng-tools.git] / lttng / commands / enable_channels.c
index 48e83df28a53039ad90f09d34f65ce74d03c3961..52745f69a651d61ec91f18ca1b8cff81bf0c9d6a 100644 (file)
 #include "../utils.h"
 
 static char *opt_channels;
-static char *opt_kernel;
+static int opt_kernel;
 static char *opt_cmd_name;
 static char *opt_session_name;
-static int opt_pid_all;
 static int opt_userspace;
 static char *opt_cmd_name;
 static pid_t opt_pid;
@@ -59,7 +58,6 @@ static struct poptOption long_options[] = {
        {"session",        's', POPT_ARG_STRING, &opt_session_name, 0, 0, 0},
        {"kernel",         'k', POPT_ARG_VAL, &opt_kernel, 1, 0, 0},
        {"userspace",      'u', POPT_ARG_STRING | POPT_ARGFLAG_OPTIONAL, &opt_cmd_name, OPT_USERSPACE, 0, 0},
-       {"all",            0,   POPT_ARG_VAL, &opt_pid_all, 1, 0, 0},
        {"pid",            'p', POPT_ARG_INT, &opt_pid, 0, 0, 0},
        {"discard",        0,   POPT_ARG_NONE, 0, OPT_DISCARD, 0, 0},
        {"overwrite",      0,   POPT_ARG_NONE, 0, OPT_OVERWRITE, 0, 0},
@@ -80,9 +78,10 @@ static void usage(FILE *ofp)
        fprintf(ofp, "  -h, --help               Show this help\n");
        fprintf(ofp, "  -s, --session            Apply on session name\n");
        fprintf(ofp, "  -k, --kernel             Apply on the kernel tracer\n");
-       fprintf(ofp, "  -u, --userspace [CMD]    Apply on the user-space tracer\n");
-       fprintf(ofp, "      --all                If -u, apply on all traceable apps\n");
-       fprintf(ofp, "  -p, --pid PID            If -u, apply on a specific PID\n");
+       fprintf(ofp, "  -u, --userspace [CMD]    Apply for the user-space tracer\n");
+       fprintf(ofp, "                           If no CMD, the domain used is UST global\n");
+       fprintf(ofp, "                           or else the domain is UST EXEC_NAME\n");
+       fprintf(ofp, "  -p, --pid PID            If -u, apply to specific PID (domain: UST PID)\n");
        fprintf(ofp, "\n");
        fprintf(ofp, "Channel options:\n");
        fprintf(ofp, "      --discard            Discard event when buffers are full%s\n",
@@ -104,6 +103,37 @@ static void usage(FILE *ofp)
        fprintf(ofp, "\n");
 }
 
+/*
+ * Set default attributes depending on those already defined from the command
+ * line.
+ */
+static void set_default_attr(struct lttng_domain *dom)
+{
+       struct lttng_channel_attr default_attr;
+
+       /* Set attributes */
+       lttng_channel_set_default_attr(dom, &default_attr);
+
+       if (chan.attr.overwrite == -1) {
+               chan.attr.overwrite = default_attr.overwrite;
+       }
+       if (chan.attr.subbuf_size == -1) {
+               chan.attr.subbuf_size = default_attr.subbuf_size;
+       }
+       if (chan.attr.num_subbuf == -1) {
+               chan.attr.num_subbuf = default_attr.num_subbuf;
+       }
+       if (chan.attr.switch_timer_interval == -1) {
+               chan.attr.switch_timer_interval = default_attr.switch_timer_interval;
+       }
+       if (chan.attr.read_timer_interval == -1) {
+               chan.attr.read_timer_interval = default_attr.read_timer_interval;
+       }
+       if (chan.attr.output == -1) {
+               chan.attr.output = default_attr.output;
+       }
+}
+
 /*
  * Adding channel using the lttng API.
  */
@@ -125,11 +155,13 @@ static int enable_channel(char *session_name)
                dom.type = LTTNG_DOMAIN_UST_EXEC_NAME;
                strncpy(dom.attr.exec_name, opt_cmd_name, NAME_MAX);
        } else {
-               ERR("Please specify a tracer (--kernel or --userspace)");
+               ERR("Please specify a tracer (-k/--kernel or -u/--userspace)");
                ret = CMD_NOT_IMPLEMENTED;
                goto error;
        }
 
+       set_default_attr(&dom);
+
        handle = lttng_create_handle(session_name, &dom);
        if (handle == NULL) {
                ret = -1;
@@ -149,8 +181,9 @@ static int enable_channel(char *session_name)
                if (ret < 0) {
                        goto error;
                } else {
-                       MSG("Channel enabled %s for session %s",
-                                       channel_name, session_name);
+                       MSG("%s channel %s enabled for session %s",
+                                       opt_kernel ? "Kernel" : "UST", channel_name,
+                                       session_name);
                }
 
                /* Next event */
@@ -168,25 +201,11 @@ error:
  */
 static void init_channel_config(void)
 {
-       if (opt_kernel) {
-               /* kernel default */
-               chan.attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
-               chan.attr.switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER;
-               chan.attr.read_timer_interval = DEFAULT_CHANNEL_READ_TIMER;
-
-               chan.attr.subbuf_size = DEFAULT_KERNEL_CHANNEL_SUBBUF_SIZE;
-               chan.attr.num_subbuf = DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM;
-               chan.attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
-       } else {
-               /* default behavior, used by UST. */
-               chan.attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
-               chan.attr.switch_timer_interval = DEFAULT_CHANNEL_SWITCH_TIMER;
-               chan.attr.read_timer_interval = DEFAULT_CHANNEL_READ_TIMER;
-
-               chan.attr.subbuf_size = DEFAULT_UST_CHANNEL_SUBBUF_SIZE;
-               chan.attr.num_subbuf = DEFAULT_UST_CHANNEL_SUBBUF_NUM;
-               chan.attr.output = DEFAULT_CHANNEL_OUTPUT;
-       }
+       /*
+        * Put -1 everywhere so we can identify those set by the command line and
+        * those needed to be set by the default values.
+        */
+       memset(&chan.attr, -1, sizeof(chan.attr));
 }
 
 /*
This page took 0.029382 seconds and 5 git commands to generate.