Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
From: jp_ikaheimonen@mentor.com (JP Ikaheimonen)
Subject: [lttng-dev] [PATCH lttng-tools 11/28] Add handling of LTTNG_ENABLE_EVENT_WITH_EXCLUSION
Date: Thu,  7 Nov 2013 12:21:35 +0200	[thread overview]
Message-ID: <1383819703-6793-2-git-send-email-jp_ikaheimonen@mentor.com> (raw)
In-Reply-To: <1383819703-6793-1-git-send-email-jp_ikaheimonen@mentor.com>

Add handling of the command LTTNG_ENABLE_EVENT_WITH_EXCLUSION.
The handling of the command is the same as command LTTNG_ENABLE_EVENT,
as the new command is just an extension.

If the command data shows that exclusions and/or filter data will
be following the command structure, read those from the incoming
socket, then forward the filter and exclusion data to
cmd_enable_event().

Signed-off-by: JP Ikaheimonen <jp_ikaheimonen at mentor.com>
---
 src/bin/lttng-sessiond/main.c | 69 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 66 insertions(+), 3 deletions(-)

diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
index 71e1a9b..ab7d49b 100644
--- a/src/bin/lttng-sessiond/main.c
+++ b/src/bin/lttng-sessiond/main.c
@@ -2930,10 +2930,73 @@ skip_domain:
 		break;
 	}
 	case LTTNG_ENABLE_EVENT:
+	case LTTNG_ENABLE_EVENT_WITH_EXCLUSION:
 	{
-		ret = cmd_enable_event(cmd_ctx->session, &cmd_ctx->lsm->domain,
-				cmd_ctx->lsm->u.enable.channel_name,
-				&cmd_ctx->lsm->u.enable.event, NULL, NULL, kernel_poll_pipe[1]);
+		struct lttng_event_exclusion *exclusion = NULL;
+		struct lttng_filter_bytecode *bytecode = NULL;
+
+		if (cmd_ctx->lsm->cmd_type == LTTNG_ENABLE_EVENT ||
+				(cmd_ctx->lsm->u.enable.exclusion_count == 0 && cmd_ctx->lsm->u.enable.bytecode_len == 0)) {
+			ret = cmd_enable_event(cmd_ctx->session, &cmd_ctx->lsm->domain,
+					cmd_ctx->lsm->u.enable.channel_name,
+					&cmd_ctx->lsm->u.enable.event, NULL, NULL, kernel_poll_pipe[1]);
+		} else {
+			if (cmd_ctx->lsm->u.enable.exclusion_count != 0) {
+				exclusion = zmalloc(sizeof(struct lttng_event_exclusion) +
+						cmd_ctx->lsm->u.enable.exclusion_count * LTTNG_SYMBOL_NAME_LEN);
+				if (!exclusion) {
+					ret = LTTNG_ERR_EXCLUSION_NOMEM;
+					goto error;
+				}
+				DBG("Receiving var len data from client ...");
+				exclusion->count = cmd_ctx->lsm->u.enable.exclusion_count;
+				ret = lttcomm_recv_unix_sock(sock, exclusion->names,
+						cmd_ctx->lsm->u.enable.exclusion_count * LTTNG_SYMBOL_NAME_LEN);
+				if (ret <= 0) {
+					DBG("Nothing recv() from client var len data... continuing");
+					*sock_error = 1;
+					ret = LTTNG_ERR_EXCLUSION_INVAL;
+					goto error;
+				}
+			}
+			if (cmd_ctx->lsm->u.enable.bytecode_len != 0) {
+				bytecode = zmalloc(cmd_ctx->lsm->u.enable.bytecode_len);
+				if (!bytecode) {
+					if (!exclusion)
+						free(exclusion);
+					ret = LTTNG_ERR_FILTER_NOMEM;
+					goto error;
+				}
+				/* Receive var. len. data */
+				DBG("Receiving var len data from client ...");
+				ret = lttcomm_recv_unix_sock(sock, bytecode,
+						cmd_ctx->lsm->u.enable.bytecode_len);
+				if (ret <= 0) {
+					DBG("Nothing recv() from client car len data... continuing");
+					*sock_error = 1;
+					if (!exclusion)
+						free(exclusion);
+					ret = LTTNG_ERR_FILTER_INVAL;
+					goto error;
+				}
+
+				if (bytecode->len + sizeof(*bytecode)
+						!= cmd_ctx->lsm->u.enable.bytecode_len) {
+					free(bytecode);
+					if (!exclusion)
+						free(exclusion);
+					ret = LTTNG_ERR_FILTER_INVAL;
+					goto error;
+				}
+			}
+
+			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,
+					kernel_poll_pipe[1]);
+		}
 		break;
 	}
 	case LTTNG_ENABLE_ALL_EVENT:
-- 
1.8.1.2




  reply	other threads:[~2013-11-07 10:21 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-07 10:21 [lttng-dev] [PATCH lttng-tools 10/28] Add new error codes for exclusion processing JP Ikaheimonen
2013-11-07 10:21 ` JP Ikaheimonen [this message]
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 12/28] Collate handling of LTTNG_ENABLE_EVENT_WITH_FILTER JP Ikaheimonen
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 13/28] Add exclusion data to ust_app_event structure JP Ikaheimonen
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 14/28] Compare also exclusions in ht_match_ust_app_event JP Ikaheimonen
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 15/28] Copy event exclusion data in add_unique_ust_app_event JP Ikaheimonen
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 16/28] Free exclusion data when ust_app_event is deleted JP Ikaheimonen
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 17/28] Add exclusion data to find_ust_app_event JP Ikaheimonen
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 18/28] Copy exclusion data in shadow_copy_event JP Ikaheimonen
2013-11-07 10:21 ` [lttng-dev] [PATCH lttng-tools 19/28] Set event exclusions in the target when event is created JP Ikaheimonen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1383819703-6793-2-git-send-email-jp_ikaheimonen@mentor.com \
    --to=jp_ikaheimonen@mentor.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox