#include <lttng/lttng.h>
#include <common/compat/socket.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <sys/un.h>
+
+#include "inet.h"
+#include "inet6.h"
+#include "unix.h"
+
/* Queue size of listen(2) */
#define LTTNG_SESSIOND_COMM_MAX_LISTEN 64
LTTNG_ENABLE_ALL_EVENT,
/* Session daemon command */
LTTNG_CREATE_SESSION,
+ LTTNG_CREATE_SESSION_URI,
LTTNG_DESTROY_SESSION,
LTTNG_LIST_CHANNELS,
LTTNG_LIST_DOMAINS,
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,
+ LTTNG_SET_FILTER,
+ LTTNG_HEALTH_CHECK,
};
/*
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 */
+ 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.
*/
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.
*/
char payload[];
};
+struct lttcomm_health_msg {
+ uint32_t component;
+ uint32_t cmd;
+};
+
+struct lttcomm_health_data {
+ uint32_t ret_code;
+};
+
/*
* lttcomm_consumer_msg is the message sent from sessiond to consumerd
* to either add a channel, add a stream, update a stream, or stop
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;
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;
};
#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,
- lttng_sock_cred *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 */