wip: receive trigger registration in session daemon
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 1 Mar 2017 03:08:32 +0000 (22:08 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 1 Mar 2017 04:02:50 +0000 (23:02 -0500)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/lttng/lttng-error.h
src/bin/lttng-sessiond/cmd.c
src/bin/lttng-sessiond/cmd.h
src/bin/lttng-sessiond/main.c
src/common/error.c

index db6fe73c27741c2b269063519adda358bd91fea9..69a82a6431ebc6da7e43a57a52ce8ac13532b70f 100644 (file)
@@ -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 */
index cc81906b6267ffc104ee357741d0b099af9fbc3c..3f2de9e7e021cb7fbd57276db4c71420e7b62a3b 100644 (file)
@@ -29,6 +29,7 @@
 #include <common/utils.h>
 #include <common/compat/string.h>
 #include <common/kernel-ctl/kernel-ctl.h>
+#include <lttng/trigger/trigger-internal.h>
 
 #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.
index ac88d51308dc6270337f81e48cc3288cbb155210..3be9adba7cdb2c9b5efa09ef64598a78483898ef 100644 (file)
@@ -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 */
index 172f8c270d5b633466ace52d70fdcf3f3f061318..af4a7660860c9c73843e9428bf6df63e710b1066 100644 (file)
@@ -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;
index 938932cdc7b5cbd6ab03a1789cf9330712a8b5f2..018fd0901d948282780aa526dcdd422a55e4a8e2 100644 (file)
@@ -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"
This page took 0.030362 seconds and 5 git commands to generate.