X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fnotification-thread-commands.c;h=a083d51af124f369692e8828a99b4c40b81be50c;hp=dc03e6a2df2fd9e7eab8634b5ece6ebb557c91de;hb=a0377dfefe40662ba7d68617bce6ff467114136c;hpb=d1ba29d290281cf72ca3ec7b0222b336c747e925 diff --git a/src/bin/lttng-sessiond/notification-thread-commands.c b/src/bin/lttng-sessiond/notification-thread-commands.c index dc03e6a2d..a083d51af 100644 --- a/src/bin/lttng-sessiond/notification-thread-commands.c +++ b/src/bin/lttng-sessiond/notification-thread-commands.c @@ -111,16 +111,21 @@ error: enum lttng_error_code notification_thread_command_register_trigger( struct notification_thread_handle *handle, - struct lttng_trigger *trigger) + struct lttng_trigger *trigger, + bool is_trigger_anonymous) { int ret; enum lttng_error_code ret_code; struct notification_thread_command cmd = {}; + LTTNG_ASSERT(trigger); init_notification_thread_command(&cmd); cmd.type = NOTIFICATION_COMMAND_TYPE_REGISTER_TRIGGER; - cmd.parameters.trigger = trigger; + lttng_trigger_get(trigger); + cmd.parameters.register_trigger.trigger = trigger; + cmd.parameters.register_trigger.is_trigger_anonymous = + is_trigger_anonymous; ret = run_command_wait(handle, &cmd); if (ret) { @@ -134,7 +139,7 @@ end: enum lttng_error_code notification_thread_command_unregister_trigger( struct notification_thread_handle *handle, - struct lttng_trigger *trigger) + const struct lttng_trigger *trigger) { int ret; enum lttng_error_code ret_code; @@ -143,7 +148,7 @@ enum lttng_error_code notification_thread_command_unregister_trigger( init_notification_thread_command(&cmd); cmd.type = NOTIFICATION_COMMAND_TYPE_UNREGISTER_TRIGGER; - cmd.parameters.trigger = trigger; + cmd.parameters.unregister_trigger.trigger = trigger; ret = run_command_wait(handle, &cmd); if (ret) { @@ -268,6 +273,90 @@ end: return ret_code; } +enum lttng_error_code notification_thread_command_add_tracer_event_source( + struct notification_thread_handle *handle, + int tracer_event_source_fd, + enum lttng_domain_type domain) +{ + int ret; + enum lttng_error_code ret_code; + struct notification_thread_command cmd = {}; + + LTTNG_ASSERT(tracer_event_source_fd >= 0); + + init_notification_thread_command(&cmd); + + cmd.type = NOTIFICATION_COMMAND_TYPE_ADD_TRACER_EVENT_SOURCE; + cmd.parameters.tracer_event_source.tracer_event_source_fd = + tracer_event_source_fd; + cmd.parameters.tracer_event_source.domain = domain; + + ret = run_command_wait(handle, &cmd); + if (ret) { + ret_code = LTTNG_ERR_UNK; + goto end; + } + + ret_code = cmd.reply_code; +end: + return ret_code; +} + +enum lttng_error_code notification_thread_command_remove_tracer_event_source( + struct notification_thread_handle *handle, + int tracer_event_source_fd) +{ + int ret; + enum lttng_error_code ret_code; + struct notification_thread_command cmd = {}; + + init_notification_thread_command(&cmd); + + cmd.type = NOTIFICATION_COMMAND_TYPE_REMOVE_TRACER_EVENT_SOURCE; + cmd.parameters.tracer_event_source.tracer_event_source_fd = + tracer_event_source_fd; + + ret = run_command_wait(handle, &cmd); + if (ret) { + ret_code = LTTNG_ERR_UNK; + goto end; + } + + ret_code = cmd.reply_code; +end: + return ret_code; +} + +enum lttng_error_code notification_thread_command_list_triggers( + struct notification_thread_handle *handle, + uid_t uid, + struct lttng_triggers **triggers) +{ + int ret; + enum lttng_error_code ret_code; + struct notification_thread_command cmd = {}; + + LTTNG_ASSERT(handle); + LTTNG_ASSERT(triggers); + + init_notification_thread_command(&cmd); + + cmd.type = NOTIFICATION_COMMAND_TYPE_LIST_TRIGGERS; + cmd.parameters.list_triggers.uid = uid; + + ret = run_command_wait(handle, &cmd); + if (ret) { + ret_code = LTTNG_ERR_UNK; + goto end; + } + + ret_code = cmd.reply_code; + *triggers = cmd.reply.list_triggers.triggers; + +end: + return ret_code; +} + void notification_thread_command_quit( struct notification_thread_handle *handle) { @@ -278,7 +367,7 @@ void notification_thread_command_quit( cmd.type = NOTIFICATION_COMMAND_TYPE_QUIT; ret = run_command_wait(handle, &cmd); - assert(!ret && cmd.reply_code == LTTNG_OK); + LTTNG_ASSERT(!ret && cmd.reply_code == LTTNG_OK); } int notification_thread_client_communication_update( @@ -295,3 +384,71 @@ int notification_thread_client_communication_update( cmd.parameters.client_communication_update.status = transmission_status; return run_command_no_wait(handle, &cmd); } + +enum lttng_error_code notification_thread_command_get_trigger( + struct notification_thread_handle *handle, + const struct lttng_trigger *trigger, + struct lttng_trigger **real_trigger) +{ + int ret; + enum lttng_error_code ret_code; + struct notification_thread_command cmd = {}; + + init_notification_thread_command(&cmd); + + cmd.type = NOTIFICATION_COMMAND_TYPE_GET_TRIGGER; + cmd.parameters.get_trigger.trigger = trigger; + ret = run_command_wait(handle, &cmd); + if (ret) { + ret_code = LTTNG_ERR_UNK; + goto end; + } + + ret_code = cmd.reply_code; + *real_trigger = cmd.reply.get_trigger.trigger; + +end: + return ret_code; +} + +/* + * Takes ownership of the payload if present. + */ +LTTNG_HIDDEN +struct lttng_event_notifier_notification *lttng_event_notifier_notification_create( + uint64_t tracer_token, + enum lttng_domain_type domain, + char *payload, + size_t payload_size) +{ + struct lttng_event_notifier_notification *notification = NULL; + + LTTNG_ASSERT(domain != LTTNG_DOMAIN_NONE); + LTTNG_ASSERT((payload && payload_size) || (!payload && !payload_size)); + + notification = zmalloc(sizeof(struct lttng_event_notifier_notification)); + if (notification == NULL) { + ERR("Error allocating notification"); + goto end; + } + + notification->tracer_token = tracer_token; + notification->type = domain; + notification->capture_buffer = payload; + notification->capture_buf_size = payload_size; + +end: + return notification; +} + +LTTNG_HIDDEN +void lttng_event_notifier_notification_destroy( + struct lttng_event_notifier_notification *notification) +{ + if (!notification) { + return; + } + + free(notification->capture_buffer); + free(notification); +}