*/
#define _GNU_SOURCE
-#include <config.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <ust/lttng-ust-comm.h>
+#include <lttng-sessiond-comm.h>
#include <lttngerr.h>
#include "ust-comm.h"
#include "ust-ctl.h"
+#include "../hashtable/hash.h"
+
+/*
+ * Init command for tracer with cmd type and correct handle.
+ */
+static void init_command(int cmd, int handle, struct lttcomm_ust_msg *command)
+{
+ memset(command, 0, sizeof(struct lttcomm_ust_msg));
+
+ command->cmd = cmd;
+ command->handle = handle;
+}
+
+/*
+ * Generic send command to ust tracer. Caller must free reply.
+ */
+static struct lttcomm_ust_reply *send_command(int sock,
+ struct lttcomm_ust_msg *command)
+{
+ struct lttcomm_ust_reply *reply;
+
+ reply = ustcomm_send_command(sock, command);
+ if (reply == NULL) {
+ goto error;
+ }
+
+ if (reply->ret_code != LTTCOMM_OK) {
+ ERR("Return code (%d): %s", reply->ret_code,
+ lttcomm_get_readable_code(reply->ret_code));
+ goto error;
+ }
+
+ return reply;
+
+error:
+ return NULL;
+}
/*
* Send registration done packet to the application.
goto error;
}
- if (reply->ret_code != USTCOMM_OK) {
- DBG("Return code: %s", ustcomm_get_readable_code(reply->ret_code));
+ if (reply->ret_code != LTTCOMM_OK) {
+ DBG("Return code: %s", lttcomm_get_readable_code(reply->ret_code));
goto error;
}
/*
* Create an UST session on the tracer.
+ *
+ * Return handle if success else negative value.
*/
int ustctl_create_session(int sock, struct ltt_ust_session *session)
{
+ int ret;
struct lttcomm_ust_msg command;
struct lttcomm_ust_reply *reply = NULL;
goto error;
}
- if (reply->ret_code != USTCOMM_OK) {
- DBG("Return code: %s", ustcomm_get_readable_code(reply->ret_code));
- goto error;
- }
-
/* Save session handle */
- session->handle = reply->ret_val;
+ ret = reply->ret_val;
free(reply);
- DBG2("ustctl create session command successful");
- return 0;
+ DBG2("ustctl create session command successful with handle %d", ret);
+
+ return ret;
error:
free(reply);
/*
* Create UST channel to the tracer.
+ *
+ * Return handle if success else negative value.
*/
int ustctl_create_channel(int sock, struct ltt_ust_session *session,
- struct lttng_channel *channel)
+ struct lttng_ust_channel *channel)
{
+ int ret;
struct lttcomm_ust_msg command;
struct lttcomm_ust_reply *reply = NULL;
- struct ltt_ust_channel *uchan;
-
- uchan = trace_ust_create_channel(channel, session->path);
- if (uchan == NULL) {
- goto error;
- }
-
- memset(&command, 0, sizeof(command));
-
- command.cmd = LTTNG_UST_CHANNEL;
- command.handle = session->handle;
+ init_command(LTTNG_UST_CHANNEL, session->handle, &command);
/* Copy channel attributes to command */
- memcpy(&command.u.channel, &uchan->attr, sizeof(command.u.channel));
+ memcpy(&command.u.channel, channel, sizeof(command.u.channel));
- reply = ustcomm_send_command(sock, &command);
+ /* Send command to tracer */
+ reply = send_command(sock, &command);
if (reply == NULL) {
goto error;
}
- if (reply->ret_code != USTCOMM_OK) {
- DBG("Return code (%d): %s", reply->ret_code,
- ustcomm_get_readable_code(reply->ret_code));
- goto error;
- }
-
- uchan->handle = reply->ret_val;
-
- /* Add channel to session */
- cds_list_add(&uchan->list, &session->channels.head);
- session->channels.count++;
-
+ ret = reply->ret_val;
free(reply);
- return 0;
+ return ret;
error:
free(reply);
struct lttcomm_ust_msg command;
struct lttcomm_ust_reply *reply = NULL;
- memset(&command, 0, sizeof(command));
-
- command.cmd = LTTNG_UST_ENABLE;
- command.handle = chan->handle;
+ init_command(LTTNG_UST_ENABLE, chan->handle, &command);
reply = ustcomm_send_command(sock, &command);
if (reply == NULL) {
goto error;
}
- if (reply->ret_code != USTCOMM_OK) {
- DBG("Return code (%d): %s", reply->ret_code,
- ustcomm_get_readable_code(reply->ret_code));
- goto error;
- } else if (reply->handle != chan->handle) {
+ if (reply->handle != chan->handle) {
ERR("Receive wrong handle from UST reply on enable channel");
goto error;
}
goto error;
}
- if (reply->ret_code != USTCOMM_OK) {
- DBG("Return code (%d): %s", reply->ret_code,
- ustcomm_get_readable_code(reply->ret_code));
- goto error;
- } else if (reply->handle != chan->handle) {
+ if (reply->handle != chan->handle) {
ERR("Receive wrong handle from UST reply on enable channel");
goto error;
}