+struct kconsumerd_local_data {
+ /* function to call when data is available on a buffer */
+ int (*on_buffer_ready)(struct kconsumerd_fd *kconsumerd_fd);
+ /* socket to communicate errors with sessiond */
+ int kconsumerd_error_socket;
+ /* socket to exchange commands with sessiond */
+ char *kconsumerd_command_sock_path;
+ /* communication with splice */
+ int kconsumerd_thread_pipe[2];
+ /* pipe to wake the poll thread when necessary */
+ int kconsumerd_poll_pipe[2];
+ /* to let the signal handler wake up the fd receiver thread */
+ int kconsumerd_should_quit[2];
+};
+
+/*
+ * kconsumerd_create
+ * initialise the necessary environnement :
+ * - create a new context
+ * - create the poll_pipe
+ * - create the should_quit pipe (for signal handler)
+ * - create the thread pipe (for splice)
+ * Takes a function pointer as argument, this function is called when data is
+ * available on a buffer. This function is responsible to do the
+ * kernctl_get_next_subbuf, read the data with mmap or splice depending on the
+ * buffer configuration and then kernctl_put_next_subbuf at the end.
+ * Returns a pointer to the new context or NULL on error.
+ */
+struct kconsumerd_local_data *kconsumerd_create(
+ int (*buffer_ready)(struct kconsumerd_fd *kconsumerd_fd));
+
+/*
+ * kconsumerd_destroy
+ * Close all fds associated with the instance and free the context
+ */
+void kconsumerd_destroy(struct kconsumerd_local_data *ctx);
+
+/*
+ * kconsumerd_on_read_subbuffer_mmap
+ * mmap the ring buffer, read it and write the data to the tracefile.
+ * Returns the number of bytes written
+ */
+int kconsumerd_on_read_subbuffer_mmap(struct kconsumerd_local_data *ctx,
+ struct kconsumerd_fd *kconsumerd_fd, unsigned long len);
+
+/*
+ * kconsumerd_on_read_subbuffer
+ *
+ * Splice the data from the ring buffer to the tracefile.
+ * Returns the number of bytes spliced
+ */
+int kconsumerd_on_read_subbuffer_splice(struct kconsumerd_local_data *ctx,
+ struct kconsumerd_fd *kconsumerd_fd, unsigned long len);
+
+/*
+ * kconsumerd_send_error
+ * send return code to ltt-sessiond
+ * returns the return code of sendmsg : the number of bytes transmitted
+ * or -1 on error.
+ */
+int kconsumerd_send_error(struct kconsumerd_local_data *ctx,
+ enum lttcomm_return_code cmd);
+
+/*
+ * kconsumerd_poll_socket
+ * Poll on the should_quit pipe and the command socket
+ * return -1 on error and should exit, 0 if data is
+ * available on the command socket
+ */