X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Fsessiond-comm.h;h=f48ba221849f8a3683fb8273cc23a2c156fd75b3;hp=52369dc625d565a1e8c26d31520caecea48f5cd8;hb=53a80697a772bc2e260e3dff006f910be6709f04;hpb=6364a07adde1072d595044a19359e61fc27940dd diff --git a/src/common/sessiond-comm/sessiond-comm.h b/src/common/sessiond-comm/sessiond-comm.h index 52369dc62..f48ba2218 100644 --- a/src/common/sessiond-comm/sessiond-comm.h +++ b/src/common/sessiond-comm/sessiond-comm.h @@ -61,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, @@ -71,6 +72,21 @@ enum lttcomm_sessiond_command { 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, + + /* Other tracer commands */ + LTTNG_SET_FILTER, }; /* @@ -169,11 +185,65 @@ enum lttcomm_return_code { 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 */ + LTTCOMM_FILTER_INVAL, /* Invalid filter bytecode */ + LTTCOMM_FILTER_NOMEM, /* Lack of memory for filter bytecode */ + LTTCOMM_FILTER_EXIST, /* Filter already exist */ /* 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. */ @@ -210,9 +280,35 @@ 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; + struct { + char channel_name[NAME_MAX]; + char event_name[NAME_MAX]; + /* Length of following bytecode */ + uint32_t bytecode_len; + } filter; } u; }; +#define LTTNG_FILTER_MAX_LEN 65336 + +/* + * Filter bytecode data. The reloc table is located at the end of the + * bytecode. It is made of tuples: (uint16_t, var. len. string). It + * starts at reloc_table_offset. + */ +struct lttng_filter_bytecode { + uint16_t len; /* len of data */ + uint16_t reloc_table_offset; + char data[0]; +}; + /* * Data structure for the response from sessiond to the lttng client. */ @@ -238,6 +334,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; @@ -249,7 +346,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; }; @@ -294,52 +400,6 @@ struct lttcomm_ust_reply { #endif /* HAVE_LIBLTTNG_UST_CTL */ -/* 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, - LTTCOMM_INET6, -}; - -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); -}; - extern const char *lttcomm_get_readable_code(enum lttcomm_return_code code); extern int lttcomm_init_inet_sockaddr(struct lttcomm_sockaddr *sockaddr, @@ -347,9 +407,12 @@ extern int lttcomm_init_inet_sockaddr(struct lttcomm_sockaddr *sockaddr, extern int lttcomm_init_inet6_sockaddr(struct lttcomm_sockaddr *sockaddr, const char *ip, unsigned int port); -extern struct lttcomm_sock *lttcomm_alloc_sock(enum lttcomm_sock_domain domain, - enum lttcomm_sock_proto proto); -extern int lttcomm_create_sock(struct lttcomm_sock *sock, - enum lttcomm_sock_domain domain, enum lttcomm_sock_proto proto); +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 */