X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=libustctl%2Fustctl.c;h=6f3d1ed97c6c983b52a631ab95cbdc358cfd0497;hb=f3049ad9e7b72287888452b9ed542c0f36e6eefe;hp=ad0b05f62d6ee67a821db79f629008696ef505ee;hpb=6b1203085c8b534328ea1d69451c9d96572d05cc;p=lttng-ust.git diff --git a/libustctl/ustctl.c b/libustctl/ustctl.c index ad0b05f6..6f3d1ed9 100644 --- a/libustctl/ustctl.c +++ b/libustctl/ustctl.c @@ -18,10 +18,10 @@ */ #include -#include -#include -#include -#include "lttng-ust-comm.h" +#include +#include +#include +#include #include "../libringbuffer/backend.h" #include "../libringbuffer/frontend.h" @@ -29,7 +29,7 @@ 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; @@ -37,7 +37,7 @@ void init_object(struct object_data *data) 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; @@ -55,6 +55,32 @@ void release_object(int sock, struct object_data *data) 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. */ @@ -79,11 +105,11 @@ int ustctl_create_session(int sock) /* 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)); @@ -132,11 +158,11 @@ error: 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)); @@ -188,12 +214,12 @@ error: * 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)); @@ -235,12 +261,12 @@ error: } 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)); @@ -265,12 +291,12 @@ int ustctl_create_event(int sock, struct lttng_ust_event *ev, } 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)); @@ -278,7 +304,7 @@ int ustctl_add_context(int sock, struct lttng_ust_context *ctx, 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); @@ -293,7 +319,7 @@ int ustctl_add_context(int sock, struct lttng_ust_context *ctx, } /* 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; @@ -310,7 +336,7 @@ int ustctl_enable(int sock, struct object_data *object) } /* 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; @@ -326,14 +352,20 @@ int ustctl_disable(int sock, struct object_data *object) 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); } @@ -375,6 +407,17 @@ int ustctl_wait_quiescent(int sock) 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; @@ -383,9 +426,9 @@ int ustctl_calibrate(int sock, struct lttng_ust_calibrate *calibrate) /* 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; @@ -397,7 +440,7 @@ struct shm_handle *ustctl_map_channel(struct object_data *chan_data) 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; @@ -421,8 +464,8 @@ struct shm_handle *ustctl_map_channel(struct object_data *chan_data) } /* 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; @@ -438,7 +481,7 @@ int ustctl_add_stream(struct shm_handle *handle, 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; @@ -446,7 +489,7 @@ int ustctl_add_stream(struct shm_handle *handle, return 0; } -void ustctl_unmap_channel(struct shm_handle *handle) +void ustctl_unmap_channel(struct lttng_ust_shm_handle *handle) { struct channel *chan; @@ -454,13 +497,13 @@ void ustctl_unmap_channel(struct shm_handle *handle) channel_destroy(chan, handle, 1); } -struct lib_ring_buffer *ustctl_open_stream_read(struct shm_handle *handle, +struct lttng_ust_lib_ring_buffer *ustctl_open_stream_read(struct lttng_ust_shm_handle *handle, int cpu) { struct channel *chan = handle->shadow_chan; int shm_fd, wait_fd; uint64_t memory_map_size; - struct lib_ring_buffer *buf; + struct lttng_ust_lib_ring_buffer *buf; int ret; buf = channel_get_ring_buffer(&chan->backend.config, @@ -473,23 +516,23 @@ struct lib_ring_buffer *ustctl_open_stream_read(struct shm_handle *handle, return buf; } -void ustctl_close_stream_read(struct shm_handle *handle, - struct lib_ring_buffer *buf) +void ustctl_close_stream_read(struct lttng_ust_shm_handle *handle, + struct lttng_ust_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, - struct lib_ring_buffer *buf) +void *ustctl_get_mmap_base(struct lttng_ust_shm_handle *handle, + struct lttng_ust_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, - struct lib_ring_buffer *buf, +int ustctl_get_mmap_len(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf, unsigned long *len) { unsigned long mmap_buf_len; @@ -507,8 +550,8 @@ int ustctl_get_mmap_len(struct shm_handle *handle, } /* returns the maximum size for sub-buffers. */ -int ustctl_get_max_subbuf_size(struct shm_handle *handle, - struct lib_ring_buffer *buf, +int ustctl_get_max_subbuf_size(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf, unsigned long *len) { struct channel *chan = handle->shadow_chan; @@ -523,8 +566,8 @@ int ustctl_get_max_subbuf_size(struct shm_handle *handle, */ /* returns the offset of the subbuffer belonging to the mmap reader. */ -int ustctl_get_mmap_read_offset(struct shm_handle *handle, - struct lib_ring_buffer *buf, unsigned long *off) +int ustctl_get_mmap_read_offset(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf, unsigned long *off) { struct channel *chan = handle->shadow_chan; unsigned long sb_bindex; @@ -538,8 +581,8 @@ int ustctl_get_mmap_read_offset(struct shm_handle *handle, } /* returns the size of the current sub-buffer, without padding (for mmap). */ -int ustctl_get_subbuf_size(struct shm_handle *handle, - struct lib_ring_buffer *buf, unsigned long *len) +int ustctl_get_subbuf_size(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf, unsigned long *len) { struct channel *chan = handle->shadow_chan; @@ -549,8 +592,8 @@ int ustctl_get_subbuf_size(struct shm_handle *handle, } /* returns the size of the current sub-buffer, without padding (for mmap). */ -int ustctl_get_padded_subbuf_size(struct shm_handle *handle, - struct lib_ring_buffer *buf, unsigned long *len) +int ustctl_get_padded_subbuf_size(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf, unsigned long *len) { struct channel *chan = handle->shadow_chan; @@ -561,16 +604,16 @@ int ustctl_get_padded_subbuf_size(struct shm_handle *handle, } /* Get exclusive read access to the next sub-buffer that can be read. */ -int ustctl_get_next_subbuf(struct shm_handle *handle, - struct lib_ring_buffer *buf) +int ustctl_get_next_subbuf(struct lttng_ust_shm_handle *handle, + struct lttng_ust_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, - struct lib_ring_buffer *buf) +int ustctl_put_next_subbuf(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf) { lib_ring_buffer_put_next_subbuf(buf, handle); return 0; @@ -579,46 +622,46 @@ int ustctl_put_next_subbuf(struct shm_handle *handle, /* snapshot */ /* Get a snapshot of the current ring buffer producer and consumer positions */ -int ustctl_snapshot(struct shm_handle *handle, - struct lib_ring_buffer *buf) +int ustctl_snapshot(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf) { return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot, &buf->prod_snapshot, handle); } /* Get the consumer position (iteration start) */ -int ustctl_snapshot_get_consumed(struct shm_handle *handle, - struct lib_ring_buffer *buf, unsigned long *pos) +int ustctl_snapshot_get_consumed(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf, unsigned long *pos) { *pos = buf->cons_snapshot; return 0; } /* Get the producer position (iteration end) */ -int ustctl_snapshot_get_produced(struct shm_handle *handle, - struct lib_ring_buffer *buf, unsigned long *pos) +int ustctl_snapshot_get_produced(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf, unsigned long *pos) { *pos = buf->prod_snapshot; return 0; } /* Get exclusive read access to the specified sub-buffer position */ -int ustctl_get_subbuf(struct shm_handle *handle, - struct lib_ring_buffer *buf, unsigned long *pos) +int ustctl_get_subbuf(struct lttng_ust_shm_handle *handle, + struct lttng_ust_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, - struct lib_ring_buffer *buf) +int ustctl_put_subbuf(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf) { lib_ring_buffer_put_subbuf(buf, handle); return 0; } -int ustctl_buffer_flush(struct shm_handle *handle, - struct lib_ring_buffer *buf) +int ustctl_buffer_flush(struct lttng_ust_shm_handle *handle, + struct lttng_ust_lib_ring_buffer *buf) { lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE, handle); return 0;