X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=e5054735efd6279aec0fe5648a122dca3f366943;hb=834978fd9e2392f20867351ca99bf7bdf31b4f56;hp=fac06e0f75c62512e67ea2e87f2b469a5b2a1d90;hpb=1b2ef7fe9e5d6396484002b5ba20b798b45519f9;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index fac06e0f7..e5054735e 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -70,6 +70,7 @@ #include "agent-thread.h" #include "save.h" #include "load-session-thread.h" +#include "syscall.h" #define CONSUMERD_FILE "lttng-consumerd" @@ -157,6 +158,7 @@ static const struct option long_options[] = { { "config", 1, 0, 'f' }, { "load", 1, 0, 'l' }, { "kmod-probes", 1, 0, 'P' }, + { "extra-kmod-probes", 1, 0, 'e' }, { NULL, 0, 0, 0 } }; @@ -641,6 +643,7 @@ static void cleanup(void) } DBG("Unloading kernel modules"); modprobe_remove_lttng_all(); + free(syscall_table); } close_consumer_sockets(); @@ -2593,6 +2596,7 @@ static int copy_session_consumer(int domain, struct ltt_session *session) dir_name = DEFAULT_KERNEL_TRACE_DIR; break; case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_UST: DBG3("Copying tracing session consumer output in UST session"); if (session->ust_session->consumer) { @@ -2637,6 +2641,7 @@ static int create_ust_session(struct ltt_session *session, switch (domain->type) { case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_UST: break; default: @@ -2823,6 +2828,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, case LTTNG_LIST_DOMAINS: case LTTNG_LIST_CHANNELS: case LTTNG_LIST_EVENTS: + case LTTNG_LIST_SYSCALLS: break; default: /* Setup lttng message with no payload */ @@ -2841,6 +2847,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, case LTTNG_CALIBRATE: case LTTNG_LIST_SESSIONS: case LTTNG_LIST_TRACEPOINTS: + case LTTNG_LIST_SYSCALLS: case LTTNG_LIST_TRACEPOINT_FIELDS: case LTTNG_SAVE_SESSION: need_tracing_session = 0; @@ -2873,7 +2880,6 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, switch (cmd_ctx->lsm->cmd_type) { case LTTNG_DISABLE_CHANNEL: case LTTNG_DISABLE_EVENT: - case LTTNG_DISABLE_ALL_EVENT: switch (cmd_ctx->lsm->domain.type) { case LTTNG_DOMAIN_KERNEL: if (!cmd_ctx->session->kernel_session) { @@ -2882,6 +2888,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, } break; case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_UST: if (!cmd_ctx->session->ust_session) { ret = LTTNG_ERR_NO_CHANNEL; @@ -2963,6 +2970,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, break; case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_UST: { if (!ust_app_supported()) { @@ -3056,6 +3064,7 @@ skip_domain: cmd_ctx->lsm->cmd_type == LTTNG_STOP_TRACE) { switch (cmd_ctx->lsm->domain.type) { case LTTNG_DOMAIN_JUL: + case LTTNG_DOMAIN_LOG4J: case LTTNG_DOMAIN_UST: if (uatomic_read(&ust_consumerd_state) != CONSUMER_STARTED) { ret = LTTNG_ERR_NO_USTCONSUMERD; @@ -3116,17 +3125,11 @@ skip_domain: } case LTTNG_DISABLE_EVENT: { + /* FIXME: passing packed structure to non-packed pointer */ + /* TODO: handle filter */ ret = cmd_disable_event(cmd_ctx->session, cmd_ctx->lsm->domain.type, cmd_ctx->lsm->u.disable.channel_name, - cmd_ctx->lsm->u.disable.name); - break; - } - case LTTNG_DISABLE_ALL_EVENT: - { - DBG("Disabling all events"); - - ret = cmd_disable_event_all(cmd_ctx->session, cmd_ctx->lsm->domain.type, - cmd_ctx->lsm->u.disable.channel_name); + &cmd_ctx->lsm->u.disable.event); break; } case LTTNG_ENABLE_CHANNEL: @@ -3241,16 +3244,6 @@ skip_domain: kernel_poll_pipe[1]); break; } - case LTTNG_ENABLE_ALL_EVENT: - { - DBG("Enabling all events"); - - ret = cmd_enable_event_all(cmd_ctx->session, &cmd_ctx->lsm->domain, - cmd_ctx->lsm->u.enable.channel_name, - cmd_ctx->lsm->u.enable.event.type, NULL, NULL, - kernel_poll_pipe[1]); - break; - } case LTTNG_LIST_TRACEPOINTS: { struct lttng_event *events; @@ -3319,6 +3312,37 @@ skip_domain: ret = LTTNG_OK; break; } + case LTTNG_LIST_SYSCALLS: + { + struct lttng_event *events; + ssize_t nb_events; + + nb_events = cmd_list_syscalls(&events); + if (nb_events < 0) { + /* Return value is a negative lttng_error_code. */ + ret = -nb_events; + goto error; + } + + /* + * Setup lttng message with payload size set to the event list size in + * bytes and then copy list into the llm payload. + */ + ret = setup_lttng_msg(cmd_ctx, sizeof(struct lttng_event) * nb_events); + if (ret < 0) { + free(events); + goto setup_error; + } + + /* Copy event list into message payload */ + memcpy(cmd_ctx->llm->payload, events, + sizeof(struct lttng_event) * nb_events); + + free(events); + + ret = LTTNG_OK; + break; + } case LTTNG_SET_CONSUMER_URI: { size_t nb_uri, len; @@ -4209,6 +4233,7 @@ static void usage(void) fprintf(stderr, " -f --config Load daemon configuration file\n"); fprintf(stderr, " -l --load PATH Load session configuration\n"); fprintf(stderr, " --kmod-probes Specify kernel module probes to load\n"); + fprintf(stderr, " --extra-kmod-probes Specify extra kernel module probes to load\n"); } /* @@ -4395,6 +4420,14 @@ static int set_option(int opt, const char *arg, const char *optname) ret = -ENOMEM; } break; + case 'e': + free(kmod_extra_probes_list); + kmod_extra_probes_list = strdup(arg); + if (!kmod_extra_probes_list) { + perror("strdup"); + ret = -ENOMEM; + } + break; case 'f': /* This is handled in set_options() thus silent break. */ break; @@ -5197,6 +5230,11 @@ int main(int argc, char **argv) /* Setup kernel tracer */ if (!opt_no_kernel) { init_kernel_tracer(); + ret = syscall_init_table(); + if (ret < 0) { + ERR("Unable to populate syscall table. Syscall tracing won't" + " work for this session daemon."); + } } /* Set ulimit for open files */