Fix: Add output option to enable-channel command
[lttng-tools.git] / src / bin / lttng / commands / enable_channels.c
index 9b5f8d64d302b276f3faee598c30e43dfcde28a2..18574775b1c4843188530d885997424d415cc430 100644 (file)
@@ -34,6 +34,7 @@ static int opt_kernel;
 static char *opt_session_name;
 static int opt_userspace;
 static struct lttng_channel chan;
+static char *opt_output;
 #if 0
 /* Not implemented yet */
 static char *opt_cmd_name;
@@ -54,6 +55,9 @@ enum {
 
 static struct lttng_handle *handle;
 
+const char *output_mmap = "mmap";
+const char *output_splice = "splice";
+
 static struct poptOption long_options[] = {
        /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
        {"help",           'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0},
@@ -73,6 +77,7 @@ static struct poptOption long_options[] = {
        {"switch-timer",   0,   POPT_ARG_INT, 0, OPT_SWITCH_TIMER, 0, 0},
        {"read-timer",     0,   POPT_ARG_INT, 0, OPT_READ_TIMER, 0, 0},
        {"list-options",   0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL},
+       {"output",         0,   POPT_ARG_STRING, &opt_output, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0}
 };
 
@@ -81,20 +86,14 @@ static struct poptOption long_options[] = {
  */
 static void usage(FILE *ofp)
 {
-       fprintf(ofp, "usage: lttng enable-channel NAME[,NAME2,...] [options] [channel_options]\n");
+       fprintf(ofp, "usage: lttng enable-channel NAME[,NAME2,...] [-u|-k] [OPTIONS]\n");
        fprintf(ofp, "\n");
+       fprintf(ofp, "Options:\n");
        fprintf(ofp, "  -h, --help               Show this help\n");
        fprintf(ofp, "      --list-options       Simple listing of options\n");
-       fprintf(ofp, "  -s, --session            Apply to session name\n");
+       fprintf(ofp, "  -s, --session NAME       Apply to session name\n");
        fprintf(ofp, "  -k, --kernel             Apply to the kernel tracer\n");
-#if 0
-       fprintf(ofp, "  -u, --userspace [CMD]    Apply to 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");
-#else
        fprintf(ofp, "  -u, --userspace          Apply to the user-space tracer\n");
-#endif
        fprintf(ofp, "\n");
        fprintf(ofp, "Channel options:\n");
        fprintf(ofp, "      --discard            Discard event when buffers are full%s\n",
@@ -116,6 +115,8 @@ static void usage(FILE *ofp)
                DEFAULT_CHANNEL_SWITCH_TIMER);
        fprintf(ofp, "      --read-timer USEC    Read timer interval in usec (default: %u)\n",
                DEFAULT_CHANNEL_READ_TIMER);
+       fprintf(ofp, "      --output TYPE        Channel output type (Values: %s, %s)\n",
+                       output_mmap, output_splice);
        fprintf(ofp, "\n");
 }
 
@@ -174,6 +175,21 @@ static int enable_channel(char *session_name)
 
        set_default_attr(&dom);
 
+       /* Setting channel output */
+       if (opt_output) {
+               if (!strncmp(output_mmap, opt_output, strlen(output_mmap))) {
+                       chan.attr.output = LTTNG_EVENT_MMAP;
+               } else if (!strncmp(output_splice, opt_output, strlen(output_splice))) {
+                       chan.attr.output = LTTNG_EVENT_SPLICE;
+               } else {
+                       ERR("Unknown output type %s. Possible values are: %s, %s\n",
+                                       opt_output, output_mmap, output_splice);
+                       usage(stderr);
+                       ret = CMD_ERROR;
+                       goto error;
+               }
+       }
+
        handle = lttng_create_handle(session_name, &dom);
        if (handle == NULL) {
                ret = -1;
@@ -192,8 +208,8 @@ static int enable_channel(char *session_name)
                ret = lttng_enable_channel(handle, &chan);
                if (ret < 0) {
                        switch (-ret) {
-                       case LTTCOMM_KERN_CHAN_EXIST:
-                       case LTTCOMM_UST_CHAN_EXIST:
+                       case LTTNG_ERR_KERN_CHAN_EXIST:
+                       case LTTNG_ERR_UST_CHAN_EXIST:
                                WARN("Channel %s: %s (session %s", channel_name,
                                                lttng_strerror(ret), session_name);
                                goto error;
This page took 0.024922 seconds and 4 git commands to generate.