From db671df94a55a262f69c9a8313f343d9113d006a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Tue, 28 Feb 2017 22:08:32 -0500 Subject: [PATCH] wip: receive trigger registration in session daemon MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- include/lttng/lttng-error.h | 1 + src/bin/lttng-sessiond/cmd.c | 37 +++++++++++++++++++++++++++++++++++ src/bin/lttng-sessiond/cmd.h | 2 ++ src/bin/lttng-sessiond/main.c | 7 +++++++ src/common/error.c | 1 + 5 files changed, 48 insertions(+) diff --git a/include/lttng/lttng-error.h b/include/lttng/lttng-error.h index db6fe73c2..69a82a643 100644 --- a/include/lttng/lttng-error.h +++ b/include/lttng/lttng-error.h @@ -145,6 +145,7 @@ enum lttng_error_code { LTTNG_ERR_REGEN_STATEDUMP_FAIL = 122, /* Failed to regenerate the state dump */ LTTNG_ERR_REGEN_STATEDUMP_NOMEM = 123, /* Failed to regenerate the state dump, not enough memory */ LTTNG_ERR_NOT_SNAPSHOT_SESSION = 124, /* Session is not in snapshot mode. */ + LTTNG_ERR_INVALID_TRIGGER = 125, /* Invalid trigger provided. */ /* MUST be last element */ LTTNG_ERR_NR, /* Last element */ diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index cc81906b6..3f2de9e7e 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "channel.h" #include "consumer.h" @@ -3566,6 +3567,42 @@ end: return ret; } +int cmd_register_trigger(struct command_ctx *cmd_ctx, int sock) +{ + int ret; + size_t trigger_len; + ssize_t sock_recv_len; + char *trigger_buffer = NULL; + struct lttng_trigger *trigger = NULL; + + trigger_len = (size_t) cmd_ctx->lsm->u.trigger.header.len; + trigger_buffer = zmalloc(trigger_len); + if (!trigger_buffer) { + ret = LTTNG_ERR_NOMEM; + goto end; + } + + sock_recv_len = lttcomm_recv_unix_sock(sock, trigger_buffer, + trigger_len); + if (sock_recv_len < 0 || sock_recv_len != trigger_len) { + ERR("Failed to receive \"register trigger\" command payload"); + goto end; + } + + if (lttng_trigger_create_from_buffer(trigger_buffer, &trigger) != + trigger_len) { + ERR("Invalid trigger payload received in \"register trigger\" command"); + ret = LTTNG_ERR_INVALID_TRIGGER; + goto end; + } + DBG("Command register trigger succeeded"); + ret = LTTNG_OK; +end: + free(trigger_buffer); + lttng_trigger_destroy(trigger); + return ret; +} + /* * Send relayd sockets from snapshot output to consumer. Ignore request if the * snapshot output is *not* set with a remote destination. diff --git a/src/bin/lttng-sessiond/cmd.h b/src/bin/lttng-sessiond/cmd.h index ac88d5130..3be9adba7 100644 --- a/src/bin/lttng-sessiond/cmd.h +++ b/src/bin/lttng-sessiond/cmd.h @@ -111,4 +111,6 @@ int cmd_set_session_shm_path(struct ltt_session *session, int cmd_regenerate_metadata(struct ltt_session *session); int cmd_regenerate_statedump(struct ltt_session *session); +int cmd_register_trigger(struct command_ctx *cmd_ctx, int sock); + #endif /* CMD_H */ diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 172f8c270..af4a76608 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -3004,6 +3004,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, case LTTNG_SET_SESSION_SHM_PATH: case LTTNG_REGENERATE_METADATA: case LTTNG_REGENERATE_STATEDUMP: + case LTTNG_REGISTER_TRIGGER: need_domain = 0; break; default: @@ -3066,6 +3067,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, case LTTNG_LIST_SYSCALLS: case LTTNG_LIST_TRACEPOINT_FIELDS: case LTTNG_SAVE_SESSION: + case LTTNG_REGISTER_TRIGGER: need_tracing_session = 0; break; default: @@ -4117,6 +4119,11 @@ error_add_context: ret = cmd_regenerate_statedump(cmd_ctx->session); break; } + case LTTNG_REGISTER_TRIGGER: + { + ret = cmd_register_trigger(cmd_ctx, sock); + break; + } default: ret = LTTNG_ERR_UND; break; diff --git a/src/common/error.c b/src/common/error.c index 938932cdc..018fd0901 100644 --- a/src/common/error.c +++ b/src/common/error.c @@ -186,6 +186,7 @@ static const char *error_string_array[] = { [ ERROR_INDEX(LTTNG_ERR_REGEN_STATEDUMP_FAIL) ] = "Failed to regenerate the state dump", [ ERROR_INDEX(LTTNG_ERR_REGEN_STATEDUMP_NOMEM) ] = "Failed to regenerate the state dump, not enough memory", [ ERROR_INDEX(LTTNG_ERR_NOT_SNAPSHOT_SESSION) ] = "Snapshot command can't be applied to a non-snapshot session", + [ ERROR_INDEX(LTTNG_ERR_INVALID_TRIGGER) ] = "Invalid trigger", /* Last element */ [ ERROR_INDEX(LTTNG_ERR_NR) ] = "Unknown error code" -- 2.34.1