Kconsumerd use the output parameter
[lttng-tools.git] / liblttkconsumerd / lttkconsumerd.h
index 808f414383edd16fdc234a931da7be1c13e09389..1dd85d509e8dcf8f476e67ac03076134a812cba8 100644 (file)
@@ -55,16 +55,118 @@ struct kconsumerd_fd {
        char path_name[PATH_MAX]; /* tracefile name */
        enum kconsumerd_fd_state state;
        unsigned long max_sb_size; /* the subbuffer size for this channel */
+       void *mmap_base;
+       size_t mmap_len;
+       enum lttng_event_output output; /* splice or mmap */
 };
 
-int kconsumerd_init(void);
-int kconsumerd_send_error(enum lttcomm_return_code cmd);
+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
+ */
 int kconsumerd_poll_socket(struct pollfd *kconsumerd_sockpoll);
+
+/*
+ *  kconsumerd_thread_poll_fds
+ *  This thread polls the fds in the ltt_fd_list to consume the data
+ *  and write it to tracefile if necessary.
+ */
 void *kconsumerd_thread_poll_fds(void *data);
+
+/*
+ *  kconsumerd_thread_receive_fds
+ *  This thread listens on the consumerd socket and
+ *  receives the file descriptors from ltt-sessiond
+ */
 void *kconsumerd_thread_receive_fds(void *data);
-void kconsumerd_should_exit(void);
+
+/*
+ * kconsumerd_should_exit
+ * Called from signal handler to ensure a clean exit
+ */
+void kconsumerd_should_exit(struct kconsumerd_local_data *ctx);
+
+/*
+ *  kconsumerd_cleanup
+ *  Cleanup the daemon's socket on exit
+ */
 void kconsumerd_cleanup(void);
-void kconsumerd_set_error_socket(int sock);
-void kconsumerd_set_command_socket_path(char *sock);
+
+/*
+ * kconsumerd_set_error_socket
+ * Set the error socket for communication with a session daemon
+ */
+void kconsumerd_set_error_socket(struct kconsumerd_local_data *ctx, int sock);
+
+/*
+ * kconsumerd_set_command_socket_path
+ * Set the command socket path for communication with a session daemon
+ */
+void kconsumerd_set_command_socket_path(struct kconsumerd_local_data *ctx, char *sock);
 
 #endif /* _LIBLTTKCONSUMERD_H */
This page took 0.030026 seconds and 5 git commands to generate.