lttng-ctl: register trigger to session daemon
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 1 Mar 2017 03:08:05 +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>
src/common/sessiond-comm/sessiond-comm.h
src/lib/lttng-ctl/lttng-ctl.c

index 0c2667031b55bd5603adaca04b09bf5fcab808c1..90f7bfbe31403447e956f35c778f79a031024cc4 100644 (file)
@@ -29,6 +29,7 @@
 #include <lttng/lttng.h>
 #include <lttng/snapshot-internal.h>
 #include <lttng/save-internal.h>
+#include <lttng/trigger/trigger-internal.h>
 #include <common/compat/socket.h>
 #include <common/uri.h>
 #include <common/defaults.h>
@@ -96,6 +97,7 @@ enum lttcomm_sessiond_command {
        LTTNG_SET_SESSION_SHM_PATH          = 40,
        LTTNG_REGENERATE_METADATA           = 41,
        LTTNG_REGENERATE_STATEDUMP          = 42,
+       LTTNG_REGISTER_TRIGGER              = 43,
 };
 
 enum lttcomm_relayd_command {
@@ -311,6 +313,9 @@ struct lttcomm_session_msg {
                struct {
                        uint32_t pid;
                } LTTNG_PACKED pid_tracker;
+               struct {
+                       struct lttng_trigger_comm header;
+               } LTTNG_PACKED trigger;
        } u;
 } LTTNG_PACKED;
 
index f0b211c7b4a426e959855637ce23d7c08496143d..06e943d279a8924877ba5238fd569e3aeb8d8961 100644 (file)
@@ -36,6 +36,8 @@
 #include <common/utils.h>
 #include <lttng/lttng.h>
 #include <lttng/health-internal.h>
+#include <lttng/trigger/trigger-internal.h>
+#include <lttng/endpoint.h>
 
 #include "filter/filter-ast.h"
 #include "filter/filter-parser.h"
@@ -2435,6 +2437,50 @@ end:
        return ret;
 }
 
+int lttng_register_trigger(struct lttng_trigger *trigger)
+{
+       int ret;
+       struct lttcomm_session_msg lsm;
+       char *trigger_buf = NULL;
+       ssize_t trigger_size;
+
+       if (!trigger) {
+               ret = -LTTNG_ERR_INVALID;
+               goto end;
+       }
+
+       if (!lttng_trigger_validate(trigger)) {
+               ret = -LTTNG_ERR_INVALID;
+               goto end;
+       }
+
+       trigger_size = lttng_trigger_serialize(trigger, NULL);
+       if (trigger_size < 0) {
+               ret = -LTTNG_ERR_UNK;
+               goto end;
+       }
+
+       trigger_buf = zmalloc(trigger_size);
+       if (!trigger_buf) {
+               ret = -LTTNG_ERR_NOMEM;
+               goto end;
+       }
+
+       memset(&lsm, 0, sizeof(lsm));
+       lsm.cmd_type = LTTNG_REGISTER_TRIGGER;
+       lsm.u.trigger.header.len = (uint32_t) trigger_size;
+       if (lttng_trigger_serialize(trigger, trigger_buf) < 0) {
+               ret = -LTTNG_ERR_UNK;
+               goto end;
+       }
+
+       ret = lttng_ctl_ask_sessiond_varlen_no_cmd_header(&lsm, trigger_buf,
+                       trigger_size, NULL);
+end:
+       free(trigger_buf);
+       return ret;
+}
+
 /*
  * lib constructor.
  */
This page took 0.030207 seconds and 5 git commands to generate.