#include <ust/lttng-ust-ctl.h>
#include <ust/lttng-ust-abi.h>
#include <ust/usterr-signal-safe.h>
-#include "lttng-ust-comm.h"
+#include <ust/lttng-ust-comm.h>
#include "../libringbuffer/backend.h"
#include "../libringbuffer/frontend.h"
volatile enum ust_loglevel ust_loglevel;
static
-void init_object(struct object_data *data)
+void init_object(struct lttng_ust_object_data *data)
{
data->handle = -1;
data->shm_fd = -1;
data->memory_map_size = 0;
}
-void release_object(int sock, struct object_data *data)
+void release_object(int sock, struct lttng_ust_object_data *data)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
free(data);
}
+/*
+ * Send registration done packet to the application.
+ */
+int ustctl_register_done(int sock)
+{
+ struct ustcomm_ust_msg lum;
+ struct ustcomm_ust_reply lur;
+ int ret;
+
+ DBG("Sending register done command to %d", sock);
+ memset(&lum, 0, sizeof(lum));
+ lum.handle = LTTNG_UST_ROOT_HANDLE;
+ lum.cmd = LTTNG_UST_REGISTER_DONE;
+ ret = ustcomm_send_app_cmd(sock, &lum, &lur);
+ if (ret)
+ return ret;
+ if (lur.ret_code != USTCOMM_OK) {
+ DBG("Return code: %s", ustcomm_get_readable_code(lur.ret_code));
+ goto error;
+ }
+ return 0;
+
+error:
+ return -1;
+}
+
/*
* returns session handle.
*/
/* open the metadata global channel */
int ustctl_open_metadata(int sock, int session_handle,
struct lttng_ust_channel_attr *chops,
- struct object_data **_metadata_data)
+ struct lttng_ust_object_data **_metadata_data)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
- struct object_data *metadata_data;
+ struct lttng_ust_object_data *metadata_data;
int ret;
metadata_data = malloc(sizeof(*metadata_data));
int ustctl_create_channel(int sock, int session_handle,
struct lttng_ust_channel_attr *chops,
- struct object_data **_channel_data)
+ struct lttng_ust_object_data **_channel_data)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
- struct object_data *channel_data;
+ struct lttng_ust_object_data *channel_data;
int ret;
channel_data = malloc(sizeof(*channel_data));
* Return 0 on success.
* Return negative error value on error.
*/
-int ustctl_create_stream(int sock, struct object_data *channel_data,
- struct object_data **_stream_data)
+int ustctl_create_stream(int sock, struct lttng_ust_object_data *channel_data,
+ struct lttng_ust_object_data **_stream_data)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
- struct object_data *stream_data;
+ struct lttng_ust_object_data *stream_data;
int ret, fd;
stream_data = malloc(sizeof(*stream_data));
}
int ustctl_create_event(int sock, struct lttng_ust_event *ev,
- struct object_data *channel_data,
- struct object_data **_event_data)
+ struct lttng_ust_object_data *channel_data,
+ struct lttng_ust_object_data **_event_data)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
- struct object_data *event_data;
+ struct lttng_ust_object_data *event_data;
int ret;
event_data = malloc(sizeof(*event_data));
}
int ustctl_add_context(int sock, struct lttng_ust_context *ctx,
- struct object_data *channel_data,
- struct object_data **_context_data)
+ struct lttng_ust_object_data *obj_data,
+ struct lttng_ust_object_data **_context_data)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
- struct object_data *context_data;
+ struct lttng_ust_object_data *context_data;
int ret;
context_data = malloc(sizeof(*context_data));
return -ENOMEM;
init_object(context_data);
memset(&lum, 0, sizeof(lum));
- lum.handle = channel_data->handle;
+ lum.handle = obj_data->handle;
lum.cmd = LTTNG_UST_CONTEXT;
lum.u.context.ctx = ctx->ctx;
ret = ustcomm_send_app_cmd(sock, &lum, &lur);
}
/* Enable event, channel and session ioctl */
-int ustctl_enable(int sock, struct object_data *object)
+int ustctl_enable(int sock, struct lttng_ust_object_data *object)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
}
/* Disable event, channel and session ioctl */
-int ustctl_disable(int sock, struct object_data *object)
+int ustctl_disable(int sock, struct lttng_ust_object_data *object)
{
struct ustcomm_ust_msg lum;
struct ustcomm_ust_reply lur;
return 0;
}
-int ustctl_start_session(int sock, struct object_data *object)
+int ustctl_start_session(int sock, int handle)
{
- return ustctl_enable(sock, object);
+ struct lttng_ust_object_data obj;
+
+ obj.handle = handle;
+ return ustctl_enable(sock, &obj);
}
-int ustctl_stop_session(int sock, struct object_data *object)
+int ustctl_stop_session(int sock, int handle)
{
- return ustctl_disable(sock, object);
+ struct lttng_ust_object_data obj;
+
+ obj.handle = handle;
+ return ustctl_disable(sock, &obj);
}
return 0;
}
+int ustctl_flush_buffer(int sock, struct lttng_ust_object_data *channel_data)
+{
+ struct ustcomm_ust_msg lum;
+ struct ustcomm_ust_reply lur;
+
+ memset(&lum, 0, sizeof(lum));
+ lum.handle = channel_data->handle;
+ lum.cmd = LTTNG_UST_FLUSH_BUFFER;
+ return ustcomm_send_app_cmd(sock, &lum, &lur);
+}
+
int ustctl_calibrate(int sock, struct lttng_ust_calibrate *calibrate)
{
return -ENOSYS;
/* Buffer operations */
/* Map channel shm into process memory */
-struct shm_handle *ustctl_map_channel(struct object_data *chan_data)
+struct lttng_ust_shm_handle *ustctl_map_channel(struct lttng_ust_object_data *chan_data)
{
- struct shm_handle *handle;
+ struct lttng_ust_shm_handle *handle;
struct channel *chan;
size_t chan_size;
return NULL;
}
/*
- * Set to -1 because the shm_handle destruction will take care
+ * Set to -1 because the lttng_ust_shm_handle destruction will take care
* of closing shm_fd and wait_fd.
*/
chan_data->shm_fd = -1;
}
/* Add stream to channel shm and map its shm into process memory */
-int ustctl_add_stream(struct shm_handle *handle,
- struct object_data *stream_data)
+int ustctl_add_stream(struct lttng_ust_shm_handle *handle,
+ struct lttng_ust_object_data *stream_data)
{
int ret;
return ret;
}
/*
- * Set to -1 because the shm_handle destruction will take care
+ * Set to -1 because the lttng_ust_shm_handle destruction will take care
* of closing shm_fd and wait_fd.
*/
stream_data->shm_fd = -1;
return 0;
}
-void ustctl_unmap_channel(struct shm_handle *handle)
+void ustctl_unmap_channel(struct lttng_ust_shm_handle *handle)
{
struct channel *chan;
channel_destroy(chan, handle, 1);
}
-struct lib_ring_buffer *ustctl_open_stream_read(struct shm_handle *handle,
+struct lib_ring_buffer *ustctl_open_stream_read(struct lttng_ust_shm_handle *handle,
int cpu)
{
struct channel *chan = handle->shadow_chan;
return buf;
}
-void ustctl_close_stream_read(struct shm_handle *handle,
+void ustctl_close_stream_read(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf)
{
lib_ring_buffer_release_read(buf, handle, 1);
/* For mmap mode, readable without "get" operation */
-void *ustctl_get_mmap_base(struct shm_handle *handle,
+void *ustctl_get_mmap_base(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf)
{
return shmp(handle, buf->backend.memory_map);
}
/* returns the length to mmap. */
-int ustctl_get_mmap_len(struct shm_handle *handle,
+int ustctl_get_mmap_len(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf,
unsigned long *len)
{
}
/* returns the maximum size for sub-buffers. */
-int ustctl_get_max_subbuf_size(struct shm_handle *handle,
+int ustctl_get_max_subbuf_size(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf,
unsigned long *len)
{
*/
/* returns the offset of the subbuffer belonging to the mmap reader. */
-int ustctl_get_mmap_read_offset(struct shm_handle *handle,
+int ustctl_get_mmap_read_offset(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf, unsigned long *off)
{
struct channel *chan = handle->shadow_chan;
}
/* returns the size of the current sub-buffer, without padding (for mmap). */
-int ustctl_get_subbuf_size(struct shm_handle *handle,
+int ustctl_get_subbuf_size(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf, unsigned long *len)
{
struct channel *chan = handle->shadow_chan;
}
/* returns the size of the current sub-buffer, without padding (for mmap). */
-int ustctl_get_padded_subbuf_size(struct shm_handle *handle,
+int ustctl_get_padded_subbuf_size(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf, unsigned long *len)
{
struct channel *chan = handle->shadow_chan;
}
/* Get exclusive read access to the next sub-buffer that can be read. */
-int ustctl_get_next_subbuf(struct shm_handle *handle,
+int ustctl_get_next_subbuf(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf)
{
return lib_ring_buffer_get_next_subbuf(buf, handle);
/* Release exclusive sub-buffer access, move consumer forward. */
-int ustctl_put_next_subbuf(struct shm_handle *handle,
+int ustctl_put_next_subbuf(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf)
{
lib_ring_buffer_put_next_subbuf(buf, handle);
/* snapshot */
/* Get a snapshot of the current ring buffer producer and consumer positions */
-int ustctl_snapshot(struct shm_handle *handle,
+int ustctl_snapshot(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf)
{
return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot,
}
/* Get the consumer position (iteration start) */
-int ustctl_snapshot_get_consumed(struct shm_handle *handle,
+int ustctl_snapshot_get_consumed(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf, unsigned long *pos)
{
*pos = buf->cons_snapshot;
}
/* Get the producer position (iteration end) */
-int ustctl_snapshot_get_produced(struct shm_handle *handle,
+int ustctl_snapshot_get_produced(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf, unsigned long *pos)
{
*pos = buf->prod_snapshot;
}
/* Get exclusive read access to the specified sub-buffer position */
-int ustctl_get_subbuf(struct shm_handle *handle,
+int ustctl_get_subbuf(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf, unsigned long *pos)
{
return lib_ring_buffer_get_subbuf(buf, *pos, handle);
}
/* Release exclusive sub-buffer access */
-int ustctl_put_subbuf(struct shm_handle *handle,
+int ustctl_put_subbuf(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf)
{
lib_ring_buffer_put_subbuf(buf, handle);
return 0;
}
-int ustctl_buffer_flush(struct shm_handle *handle,
+int ustctl_buffer_flush(struct lttng_ust_shm_handle *handle,
struct lib_ring_buffer *buf)
{
lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE, handle);