X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Fsessiond-comm.h;h=580beec32b74953a4f08099220837183edb40b1e;hp=2e927955594c286ecd4bbd7ca2bae0137b3874a1;hb=de5e90863d3824dd3a5bc52d4cba1cd9b0329200;hpb=394016d17dedc581b892f2ca7889f715c77a08fd diff --git a/src/common/sessiond-comm/sessiond-comm.h b/src/common/sessiond-comm/sessiond-comm.h index 2e9279555..580beec32 100644 --- a/src/common/sessiond-comm/sessiond-comm.h +++ b/src/common/sessiond-comm/sessiond-comm.h @@ -3,18 +3,18 @@ * Julien Desfossez * Mathieu Desnoyers * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; only version 2 of the License. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2 only, + * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* @@ -28,7 +28,15 @@ #define _GNU_SOURCE #include #include -#include +#include + +#include +#include +#include + +#include "inet.h" +#include "inet6.h" +#include "unix.h" /* Queue size of listen(2) */ #define LTTNG_SESSIOND_COMM_MAX_LISTEN 64 @@ -53,6 +61,7 @@ enum lttcomm_sessiond_command { LTTNG_ENABLE_ALL_EVENT, /* Session daemon command */ LTTNG_CREATE_SESSION, + LTTNG_CREATE_SESSION_URI, LTTNG_DESTROY_SESSION, LTTNG_LIST_CHANNELS, LTTNG_LIST_DOMAINS, @@ -62,20 +71,32 @@ enum lttcomm_sessiond_command { LTTNG_REGISTER_CONSUMER, LTTNG_START_TRACE, LTTNG_STOP_TRACE, + LTTNG_LIST_TRACEPOINT_FIELDS, + /* Consumer */ + LTTNG_DISABLE_CONSUMER, + LTTNG_ENABLE_CONSUMER, + LTTNG_SET_CONSUMER_URI, + /* Relay daemon */ + RELAYD_ADD_STREAM, + RELAYD_CREATE_SESSION, + RELAYD_START_DATA, + RELAYD_UPDATE_SYNC_INFO, + RELAYD_VERSION, + RELAYD_SEND_METADATA, }; /* * lttcomm error code. */ enum lttcomm_return_code { - LTTCOMM_OK = 1000, /* Ok */ + LTTCOMM_OK = 10, /* Ok */ LTTCOMM_ERR, /* Unknown Error */ LTTCOMM_UND, /* Undefine command */ LTTCOMM_NOT_IMPLEMENTED, /* Command not implemented */ LTTCOMM_UNKNOWN_DOMAIN, /* Tracing domain not known */ LTTCOMM_ALLOC_FAIL, /* Trace allocation fail */ LTTCOMM_NO_SESSION, /* No session found */ - LTTCOMM_CREATE_FAIL, /* Create trace fail */ + LTTCOMM_CREATE_DIR_FAIL, /* Create directory fail */ LTTCOMM_SESSION_FAIL, /* Create session fail */ LTTCOMM_START_FAIL, /* Start tracing fail */ LTTCOMM_STOP_FAIL, /* Stop tracing fail */ @@ -95,6 +116,7 @@ enum lttcomm_return_code { LTTCOMM_KERN_VERSION, /* Kernel tracer version is not compatible */ LTTCOMM_KERN_EVENT_EXIST, /* Kernel event already exists */ LTTCOMM_KERN_SESS_FAIL, /* Kernel create session failed */ + LTTCOMM_KERN_CHAN_EXIST, /* Kernel channel already exists */ LTTCOMM_KERN_CHAN_FAIL, /* Kernel create channel failed */ LTTCOMM_KERN_CHAN_NOT_FOUND, /* Kernel channel not found */ LTTCOMM_KERN_CHAN_DISABLE_FAIL, /* Kernel disable channel failed */ @@ -111,6 +133,8 @@ enum lttcomm_return_code { LTTCOMM_KERN_DIR_EXIST, /* Kernel trace directory exist */ LTTCOMM_KERN_NO_SESSION, /* No kernel session found */ LTTCOMM_KERN_LIST_FAIL, /* Kernel listing events failed */ + LTTCOMM_UST_CALIBRATE_FAIL, /* UST calibration failed */ + LTTCOMM_UST_VERSION, /* UST tracer version is not compatible */ LTTCOMM_UST_SESS_FAIL, /* UST create session failed */ LTTCOMM_UST_CHAN_EXIST, /* UST channel already exist */ LTTCOMM_UST_CHAN_FAIL, /* UST create channel failed */ @@ -133,6 +157,11 @@ enum lttcomm_return_code { LTTCOMM_UST_EVENT_EXIST, /* UST event exist */ LTTCOMM_UST_EVENT_NOT_FOUND, /* UST event not found */ LTTCOMM_UST_CONTEXT_EXIST, /* UST context exist */ + LTTCOMM_UST_CONTEXT_INVAL, /* UST context invalid */ + LTTCOMM_NEED_ROOT_SESSIOND, /* root sessiond is needed */ + LTTCOMM_TRACE_ALREADY_STARTED, /* Tracing already started */ + LTTCOMM_TRACE_ALREADY_STOPPED, /* Tracing already stopped */ + LTTCOMM_KERN_EVENT_ENOSYS, /* Kernel event type not supported */ CONSUMERD_COMMAND_SOCK_READY, /* when consumerd command socket ready */ CONSUMERD_SUCCESS_RECV_FD, /* success on receiving fds */ @@ -148,10 +177,66 @@ enum lttcomm_return_code { CONSUMERD_SPLICE_EINVAL, /* EINVAL from splice(2) */ CONSUMERD_SPLICE_ENOMEM, /* ENOMEM from splice(2) */ CONSUMERD_SPLICE_ESPIPE, /* ESPIPE from splice(2) */ + LTTCOMM_INVALID, /* Invalid parameter */ + LTTCOMM_NO_USTCONSUMERD, /* No UST consumer detected */ + LTTCOMM_NO_KERNCONSUMERD, /* No Kernel consumer detected */ + LTTCOMM_EVENT_EXIST_LOGLEVEL, /* Event already enabled with different loglevel */ + LTTCOMM_URI_DATA_MISS, /* Missing network data URI */ + LTTCOMM_URI_CTRL_MISS, /* Missing network control URI */ + LTTCOMM_ENABLE_CONSUMER_FAIL, /* Enabling consumer failed */ + LTTCOMM_RELAYD_SESSION_FAIL, /* lttng-relayd create session failed */ + LTTCOMM_RELAYD_VERSION_FAIL, /* lttng-relayd not compatible */ + /* MUST be last element */ LTTCOMM_NR, /* Last element */ }; +/* lttng socket protocol. */ +enum lttcomm_sock_proto { + LTTCOMM_SOCK_UDP, + LTTCOMM_SOCK_TCP, +}; + +/* + * Index in the net_families array below. Please keep in sync! + */ +enum lttcomm_sock_domain { + LTTCOMM_INET = 1, + LTTCOMM_INET6 = 2, +}; + +struct lttcomm_sockaddr { + enum lttcomm_sock_domain type; + union { + struct sockaddr_in sin; + struct sockaddr_in6 sin6; + } addr; +}; + +struct lttcomm_sock { + int fd; + enum lttcomm_sock_proto proto; + struct lttcomm_sockaddr sockaddr; + const struct lttcomm_proto_ops *ops; +}; + +struct lttcomm_net_family { + int family; + int (*create) (struct lttcomm_sock *sock, int type, int proto); +}; + +struct lttcomm_proto_ops { + int (*bind) (struct lttcomm_sock *sock); + int (*close) (struct lttcomm_sock *sock); + int (*connect) (struct lttcomm_sock *sock); + struct lttcomm_sock *(*accept) (struct lttcomm_sock *sock); + int (*listen) (struct lttcomm_sock *sock, int backlog); + ssize_t (*recvmsg) (struct lttcomm_sock *sock, void *buf, size_t len, + int flags); + ssize_t (*sendmsg) (struct lttcomm_sock *sock, void *buf, size_t len, + int flags); +}; + /* * Data structure received from lttng client to session daemon. */ @@ -188,6 +273,13 @@ struct lttcomm_session_msg { char channel_name[NAME_MAX]; } list; struct lttng_calibrate calibrate; + /* Used by the set_consumer_uri call */ + struct lttng_uri uri; + struct { + uint32_t enable_consumer; + struct lttng_uri ctrl_uri; + struct lttng_uri data_uri; + } create_uri; } u; }; @@ -216,6 +308,7 @@ struct lttcomm_consumer_msg { uint64_t max_sb_size; /* the subbuffer size for this channel */ /* shm_fd and wait_fd are sent as ancillary data */ uint64_t mmap_len; + char name[LTTNG_SYMBOL_NAME_LEN]; } channel; struct { int channel_key; @@ -227,7 +320,16 @@ struct lttcomm_consumer_msg { uid_t uid; /* User ID owning the session */ gid_t gid; /* Group ID owning the session */ char path_name[PATH_MAX]; + int net_index; + unsigned int metadata_flag; + char name[LTTNG_SYMBOL_NAME_LEN]; /* Name string of the stream */ } stream; + struct { + int net_index; + enum lttng_stream_type type; + /* Open socket to the relayd */ + struct lttcomm_sock sock; + } relayd_sock; } u; }; @@ -272,25 +374,19 @@ struct lttcomm_ust_reply { #endif /* HAVE_LIBLTTNG_UST_CTL */ -extern int lttcomm_create_unix_sock(const char *pathname); -extern int lttcomm_connect_unix_sock(const char *pathname); -extern int lttcomm_accept_unix_sock(int sock); -extern int lttcomm_listen_unix_sock(int sock); -extern int lttcomm_close_unix_sock(int sock); - -/* Send a message accompanied by fd(s) over a unix socket. */ -extern ssize_t lttcomm_send_fds_unix_sock(int sock, int *fds, size_t nb_fd); -/* Recv a message accompanied by fd(s) from a unix socket */ -extern ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd); - -extern ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len); -extern ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len); +extern const char *lttcomm_get_readable_code(enum lttcomm_return_code code); -extern ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len); -extern ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, - struct ucred *creds); +extern int lttcomm_init_inet_sockaddr(struct lttcomm_sockaddr *sockaddr, + const char *ip, unsigned int port); +extern int lttcomm_init_inet6_sockaddr(struct lttcomm_sockaddr *sockaddr, + const char *ip, unsigned int port); -extern const char *lttcomm_get_readable_code(enum lttcomm_return_code code); -extern int lttcomm_setsockopt_creds_unix_sock(int sock); +extern struct lttcomm_sock *lttcomm_alloc_sock(enum lttcomm_sock_proto proto); +extern int lttcomm_create_sock(struct lttcomm_sock *sock); +extern struct lttcomm_sock *lttcomm_alloc_sock_from_uri(struct lttng_uri *uri); +extern void lttcomm_destroy_sock(struct lttcomm_sock *sock); +extern struct lttcomm_sock *lttcomm_alloc_copy_sock(struct lttcomm_sock *src); +extern void lttcomm_copy_sock(struct lttcomm_sock *dst, + struct lttcomm_sock *src); #endif /* _LTTNG_SESSIOND_COMM_H */