* IMPORTANT: this structure is part of the ABI between the probe and
* UST. Fields need to be only added at the end, never reordered, never
* removed.
+ *
+ * The field @struct_size should be used to determine the size of the
+ * structure. It should be queried before using additional fields added
+ * at the end of the structure.
*/
-struct lttng_channel_ops {
+struct lttng_ust_channel_ops {
+ uint32_t struct_size;
+
struct lttng_channel *(*channel_create)(const char *name,
void *buf_addr,
size_t subbuf_size, size_t num_subbuf,
int (*flush_buffer)(struct channel *chan, struct lttng_ust_shm_handle *handle);
void (*event_strcpy)(struct lttng_ust_lib_ring_buffer_ctx *ctx,
const char *src, size_t len);
+
+ /* End of base ABI. Fields below should be used after checking struct_size. */
};
/*
struct lttng_session *session;
int objd; /* Object associated to channel */
struct cds_list_head node; /* Channel list in session */
- const struct lttng_channel_ops *ops;
+ const struct lttng_ust_channel_ops *ops;
int header_type; /* 0: unset, 1: compact, 2: large */
struct lttng_ust_shm_handle *handle; /* shared-memory handle */
static struct lttng_transport lttng_relay_transport = {
.name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING "-mmap",
.ops = {
+ .struct_size = sizeof(struct lttng_ust_channel_ops),
.channel_create = _channel_create,
.channel_destroy = lttng_channel_destroy,
.event_reserve = lttng_event_reserve,
static struct lttng_transport lttng_relay_transport = {
.name = "relay-" RING_BUFFER_MODE_TEMPLATE_STRING "-mmap",
.ops = {
+ .struct_size = sizeof(struct lttng_ust_channel_ops),
+
.channel_create = _channel_create,
.channel_destroy = lttng_channel_destroy,
.event_reserve = lttng_event_reserve,
.event_commit = lttng_event_commit,
.event_write = lttng_event_write,
.packet_avail_size = lttng_packet_avail_size,
- //.get_reader_wait_queue = lttng_get_reader_wait_queue,
- //.get_hp_wait_queue = lttng_get_hp_wait_queue,
.is_finalized = lttng_is_finalized,
.is_disabled = lttng_is_disabled,
.flush_buffer = lttng_flush_buffer,
struct lttng_transport {
char *name;
struct cds_list_head node;
- struct lttng_channel_ops ops;
+ struct lttng_ust_channel_ops ops;
const struct lttng_ust_lib_ring_buffer_config *client_config;
};