Send filter expression string to session daemon
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 605e91dc382f8893cc9f480c590e70afbdd1e998..4d81896bfd121cbe8163bafcc62fe65f3c134c08 100644 (file)
@@ -3039,6 +3039,7 @@ skip_domain:
        {
                struct lttng_event_exclusion *exclusion = NULL;
                struct lttng_filter_bytecode *bytecode = NULL;
+               char *filter_expression = NULL;
 
                /* Handle exclusion events and receive it from the client. */
                if (cmd_ctx->lsm->u.enable.exclusion_count > 0) {
@@ -3064,6 +3065,38 @@ skip_domain:
                        }
                }
 
+               /* Get filter expression from client. */
+               if (cmd_ctx->lsm->u.enable.expression_len > 0) {
+                       size_t expression_len =
+                               cmd_ctx->lsm->u.enable.expression_len;
+
+                       if (expression_len > LTTNG_FILTER_MAX_LEN) {
+                               ret = LTTNG_ERR_FILTER_INVAL;
+                               free(exclusion);
+                               goto error;
+                       }
+
+                       filter_expression = zmalloc(expression_len);
+                       if (!filter_expression) {
+                               free(exclusion);
+                               ret = LTTNG_ERR_FILTER_NOMEM;
+                               goto error;
+                       }
+
+                       /* Receive var. len. data */
+                       DBG("Receiving var len filter's expression from client ...");
+                       ret = lttcomm_recv_unix_sock(sock, filter_expression,
+                               expression_len);
+                       if (ret <= 0) {
+                               DBG("Nothing recv() from client car len data... continuing");
+                               *sock_error = 1;
+                               free(filter_expression);
+                               free(exclusion);
+                               ret = LTTNG_ERR_FILTER_INVAL;
+                               goto error;
+                       }
+               }
+
                /* Handle filter and get bytecode from client. */
                if (cmd_ctx->lsm->u.enable.bytecode_len > 0) {
                        size_t bytecode_len = cmd_ctx->lsm->u.enable.bytecode_len;
@@ -3103,7 +3136,8 @@ skip_domain:
 
                ret = cmd_enable_event(cmd_ctx->session, &cmd_ctx->lsm->domain,
                                cmd_ctx->lsm->u.enable.channel_name,
-                               &cmd_ctx->lsm->u.enable.event, bytecode, exclusion,
+                               &cmd_ctx->lsm->u.enable.event,
+                               filter_expression, bytecode, exclusion,
                                kernel_poll_pipe[1]);
                break;
        }
@@ -3113,7 +3147,8 @@ skip_domain:
 
                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, kernel_poll_pipe[1]);
+                               cmd_ctx->lsm->u.enable.event.type, NULL, NULL,
+                               kernel_poll_pipe[1]);
                break;
        }
        case LTTNG_LIST_TRACEPOINTS:
This page took 0.026062 seconds and 5 git commands to generate.