*/
static void usage(FILE *ofp)
{
- fprintf(ofp, "usage: lttng enable-channel NAME[,NAME2,...] [-u|-k] [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, " -C, --tracefile-size SIZE\n");
fprintf(ofp, " Maximum size of each tracefile within a stream (in bytes). 0 means unlimited.\n");
fprintf(ofp, " (default: %u)\n", DEFAULT_CHANNEL_TRACEFILE_SIZE);
+ fprintf(ofp, " Note: traces generated with this option may inaccurately report\n");
+ fprintf(ofp, " discarded events as per CTF 1.8.\n");
fprintf(ofp, " -W, --tracefile-count COUNT\n");
fprintf(ofp, " Used in conjunction with -C option, this will limit the number\n");
fprintf(ofp, " of files created to the specified count. 0 means unlimited.\n");
if (chan.attr.read_timer_interval == -1) {
chan.attr.read_timer_interval = default_attr.read_timer_interval;
}
- if (chan.attr.output == -1) {
+ if ((int) chan.attr.output == -1) {
chan.attr.output = default_attr.output;
}
if (chan.attr.tracefile_count == -1) {
}
} else if (opt_userspace) {
dom.type = LTTNG_DOMAIN_UST;
- if (opt_buffer_uid) {
- dom.buf_type = LTTNG_BUFFER_PER_UID;
+ if (opt_buffer_pid) {
+ dom.buf_type = LTTNG_BUFFER_PER_PID;
} else {
if (opt_buffer_global) {
ERR("Buffer type not supported for domain -u");
ret = CMD_ERROR;
goto error;
}
- dom.buf_type = LTTNG_BUFFER_PER_PID;
+ dom.buf_type = LTTNG_BUFFER_PER_UID;
}
} else {
- ERR("Please specify a tracer (-k/--kernel or -u/--userspace)");
+ print_missing_domain();
ret = CMD_ERROR;
goto error;
}
set_default_attr(&dom);
+ if (chan.attr.tracefile_size == 0 && chan.attr.tracefile_count) {
+ ERR("Missing option --tracefile-size. "
+ "A file count without a size won't do anything.");
+ ret = CMD_ERROR;
+ goto error;
+ }
+
if ((chan.attr.tracefile_size > 0) &&
(chan.attr.tracefile_size < chan.attr.subbuf_size)) {
WARN("Tracefile size rounded up from (%" PRIu64 ") to subbuffer size (%" PRIu64 ")",
switch (-ret) {
case LTTNG_ERR_KERN_CHAN_EXIST:
case LTTNG_ERR_UST_CHAN_EXIST:
+ case LTTNG_ERR_CHAN_EXIST:
WARN("Channel %s: %s (session %s)", channel_name,
lttng_strerror(ret), session_name);
goto error;
warn = 1;
} else {
MSG("%s channel %s enabled for session %s",
- opt_kernel ? "Kernel" : "UST", channel_name,
- session_name);
+ get_domain_str(dom.type), channel_name, session_name);
}
/* Next event */
pc = poptGetContext(NULL, argc, argv, long_options, 0);
poptReadDefaultConfig(pc, 0);
+ /* TODO: mi support */
+ if (lttng_opt_mi) {
+ ret = -LTTNG_ERR_MI_NOT_IMPLEMENTED;
+ ERR("mi option not supported");
+ goto end;
+ }
+
while ((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
case OPT_HELP:
order = get_count_order_u64(chan.attr.subbuf_size);
assert(order >= 0);
rounded_size = 1ULL << order;
+ if (rounded_size < chan.attr.subbuf_size) {
+ ERR("The subbuf size (%" PRIu64 ") is rounded and overflows!",
+ chan.attr.subbuf_size);
+ ret = CMD_ERROR;
+ goto end;
+ }
+
if (rounded_size != chan.attr.subbuf_size) {
WARN("The subbuf size (%" PRIu64 ") is rounded to the next power of 2 (%" PRIu64 ")",
chan.attr.subbuf_size, rounded_size);
order = get_count_order_u64(chan.attr.num_subbuf);
assert(order >= 0);
rounded_size = 1ULL << order;
+ if (rounded_size < chan.attr.num_subbuf) {
+ ERR("The number of subbuffers (%" PRIu64 ") is rounded and overflows!",
+ chan.attr.num_subbuf);
+ ret = CMD_ERROR;
+ goto end;
+ }
+
if (rounded_size != chan.attr.num_subbuf) {
WARN("The number of subbuffers (%" PRIu64 ") is rounded to the next power of 2 (%" PRIu64 ")",
chan.attr.num_subbuf, rounded_size);