/*
- * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
- * Copyright (C) 2011 Julien Desfossez <julien.desfossez@polymtl.ca>
+ * Copyright (C) 2011 EfficiOS Inc.
* Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
* SPDX-License-Identifier: GPL-2.0-only
#include <arpa/inet.h>
#include <netinet/in.h>
+#include <stdint.h>
#include <sys/un.h>
#include "inet.h"
#define LTTCOMM_MAX_SEND_FDS 16
#endif
-/*
- * Get the error code index from 0 since LTTCOMM_OK start at 1000
- */
-#define LTTCOMM_ERR_INDEX(code) (code - LTTCOMM_CONSUMERD_COMMAND_SOCK_READY)
-
enum lttcomm_sessiond_command {
/* Tracer command */
LTTNG_ADD_CONTEXT = 0,
LTTNG_SESSION_LIST_ROTATION_SCHEDULES = 48,
LTTNG_CREATE_SESSION_EXT = 49,
LTTNG_CLEAR_SESSION = 50,
+ LTTNG_LIST_TRIGGERS = 51,
+ LTTNG_EXECUTE_ERROR_QUERY = 52,
};
+static inline
+const char *lttcomm_sessiond_command_str(enum lttcomm_sessiond_command cmd)
+{
+ switch (cmd) {
+ case LTTNG_ADD_CONTEXT:
+ return "LTTNG_ADD_CONTEXT";
+ case LTTNG_DISABLE_CHANNEL:
+ return "LTTNG_DISABLE_CHANNEL";
+ case LTTNG_DISABLE_EVENT:
+ return "LTTNG_DISABLE_EVENT";
+ case LTTNG_LIST_SYSCALLS:
+ return "LTTNG_LIST_SYSCALLS";
+ case LTTNG_ENABLE_CHANNEL:
+ return "LTTNG_ENABLE_CHANNEL";
+ case LTTNG_ENABLE_EVENT:
+ return "LTTNG_ENABLE_EVENT";
+ case LTTNG_DESTROY_SESSION:
+ return "LTTNG_DESTROY_SESSION";
+ case LTTNG_LIST_CHANNELS:
+ return "LTTNG_LIST_CHANNELS";
+ case LTTNG_LIST_DOMAINS:
+ return "LTTNG_LIST_DOMAINS";
+ case LTTNG_LIST_EVENTS:
+ return "LTTNG_LIST_EVENTS";
+ case LTTNG_LIST_SESSIONS:
+ return "LTTNG_LIST_SESSIONS";
+ case LTTNG_LIST_TRACEPOINTS:
+ return "LTTNG_LIST_TRACEPOINTS";
+ case LTTNG_REGISTER_CONSUMER:
+ return "LTTNG_REGISTER_CONSUMER";
+ case LTTNG_START_TRACE:
+ return "LTTNG_START_TRACE";
+ case LTTNG_STOP_TRACE:
+ return "LTTNG_STOP_TRACE";
+ case LTTNG_LIST_TRACEPOINT_FIELDS:
+ return "LTTNG_LIST_TRACEPOINT_FIELDS";
+ case LTTNG_DISABLE_CONSUMER:
+ return "LTTNG_DISABLE_CONSUMER";
+ case LTTNG_ENABLE_CONSUMER:
+ return "LTTNG_ENABLE_CONSUMER";
+ case LTTNG_SET_CONSUMER_URI:
+ return "LTTNG_SET_CONSUMER_URI";
+ case LTTNG_DATA_PENDING:
+ return "LTTNG_DATA_PENDING";
+ case LTTNG_SNAPSHOT_ADD_OUTPUT:
+ return "LTTNG_SNAPSHOT_ADD_OUTPUT";
+ case LTTNG_SNAPSHOT_DEL_OUTPUT:
+ return "LTTNG_SNAPSHOT_DEL_OUTPUT";
+ case LTTNG_SNAPSHOT_LIST_OUTPUT:
+ return "LTTNG_SNAPSHOT_LIST_OUTPUT";
+ case LTTNG_SNAPSHOT_RECORD:
+ return "LTTNG_SNAPSHOT_RECORD";
+ case LTTNG_SAVE_SESSION:
+ return "LTTNG_SAVE_SESSION";
+ case LTTNG_PROCESS_ATTR_TRACKER_ADD_INCLUDE_VALUE:
+ return "LTTNG_PROCESS_ATTR_TRACKER_ADD_INCLUDE_VALUE";
+ case LTTNG_PROCESS_ATTR_TRACKER_REMOVE_INCLUDE_VALUE:
+ return "LTTNG_PROCESS_ATTR_TRACKER_REMOVE_INCLUDE_VALUE";
+ case LTTNG_PROCESS_ATTR_TRACKER_GET_POLICY:
+ return "LTTNG_PROCESS_ATTR_TRACKER_GET_POLICY";
+ case LTTNG_PROCESS_ATTR_TRACKER_SET_POLICY:
+ return "LTTNG_PROCESS_ATTR_TRACKER_SET_POLICY";
+ case LTTNG_PROCESS_ATTR_TRACKER_GET_INCLUSION_SET:
+ return "LTTNG_PROCESS_ATTR_TRACKER_GET_INCLUSION_SET";
+ case LTTNG_SET_SESSION_SHM_PATH:
+ return "LTTNG_SET_SESSION_SHM_PATH";
+ case LTTNG_REGENERATE_METADATA:
+ return "LTTNG_REGENERATE_METADATA";
+ case LTTNG_REGENERATE_STATEDUMP:
+ return "LTTNG_REGENERATE_STATEDUMP";
+ case LTTNG_REGISTER_TRIGGER:
+ return "LTTNG_REGISTER_TRIGGER";
+ case LTTNG_UNREGISTER_TRIGGER:
+ return "LTTNG_UNREGISTER_TRIGGER";
+ case LTTNG_ROTATE_SESSION:
+ return "LTTNG_ROTATE_SESSION";
+ case LTTNG_ROTATION_GET_INFO:
+ return "LTTNG_ROTATION_GET_INFO";
+ case LTTNG_ROTATION_SET_SCHEDULE:
+ return "LTTNG_ROTATION_SET_SCHEDULE";
+ case LTTNG_SESSION_LIST_ROTATION_SCHEDULES:
+ return "LTTNG_SESSION_LIST_ROTATION_SCHEDULES";
+ case LTTNG_CREATE_SESSION_EXT:
+ return "LTTNG_CREATE_SESSION_EXT";
+ case LTTNG_CLEAR_SESSION:
+ return "LTTNG_CLEAR_SESSION";
+ case LTTNG_LIST_TRIGGERS:
+ return "LTTNG_LIST_TRIGGERS";
+ case LTTNG_EXECUTE_ERROR_QUERY:
+ return "LTTNG_EXECUTE_ERROR_QUERY";
+ default:
+ abort();
+ }
+}
+
enum lttcomm_relayd_command {
RELAYD_ADD_STREAM = 1,
RELAYD_CREATE_SESSION = 2,
/* Feature branch specific commands start at 10000. */
};
+static inline
+const char *lttcomm_relayd_command_str(lttcomm_relayd_command cmd)
+{
+ switch (cmd) {
+ case RELAYD_ADD_STREAM:
+ return "RELAYD_ADD_STREAM";
+ case RELAYD_CREATE_SESSION:
+ return "RELAYD_CREATE_SESSION";
+ case RELAYD_START_DATA:
+ return "RELAYD_START_DATA";
+ case RELAYD_UPDATE_SYNC_INFO:
+ return "RELAYD_UPDATE_SYNC_INFO";
+ case RELAYD_VERSION:
+ return "RELAYD_VERSION";
+ case RELAYD_SEND_METADATA:
+ return "RELAYD_SEND_METADATA";
+ case RELAYD_CLOSE_STREAM:
+ return "RELAYD_CLOSE_STREAM";
+ case RELAYD_DATA_PENDING:
+ return "RELAYD_DATA_PENDING";
+ case RELAYD_QUIESCENT_CONTROL:
+ return "RELAYD_QUIESCENT_CONTROL";
+ case RELAYD_BEGIN_DATA_PENDING:
+ return "RELAYD_BEGIN_DATA_PENDING";
+ case RELAYD_END_DATA_PENDING:
+ return "RELAYD_END_DATA_PENDING";
+ case RELAYD_ADD_INDEX:
+ return "RELAYD_ADD_INDEX";
+ case RELAYD_SEND_INDEX:
+ return "RELAYD_SEND_INDEX";
+ case RELAYD_CLOSE_INDEX:
+ return "RELAYD_CLOSE_INDEX";
+ case RELAYD_LIST_SESSIONS:
+ return "RELAYD_LIST_SESSIONS";
+ case RELAYD_STREAMS_SENT:
+ return "RELAYD_STREAMS_SENT";
+ case RELAYD_RESET_METADATA:
+ return "RELAYD_RESET_METADATA";
+ case RELAYD_ROTATE_STREAMS:
+ return "RELAYD_ROTATE_STREAMS";
+ case RELAYD_CREATE_TRACE_CHUNK:
+ return "RELAYD_CREATE_TRACE_CHUNK";
+ case RELAYD_CLOSE_TRACE_CHUNK:
+ return "RELAYD_CLOSE_TRACE_CHUNK";
+ case RELAYD_TRACE_CHUNK_EXISTS:
+ return "RELAYD_TRACE_CHUNK_EXISTS";
+ case RELAYD_GET_CONFIGURATION:
+ return "RELAYD_GET_CONFIGURATION";
+ default:
+ abort();
+ }
+}
+
/*
* lttcomm error code.
*/
LTTCOMM_CONSUMERD_ROTATION_FAIL, /* Rotation has failed. */
LTTCOMM_CONSUMERD_SNAPSHOT_FAILED, /* snapshot has failed. */
LTTCOMM_CONSUMERD_CREATE_TRACE_CHUNK_FAILED,/* Trace chunk creation failed. */
- LTTCOMM_CONSUMERD_CLOSE_TRACE_CHUNK_FAILED, /* Trace chunk creation failed. */
+ LTTCOMM_CONSUMERD_CLOSE_TRACE_CHUNK_FAILED, /* Trace chunk close failed. */
LTTCOMM_CONSUMERD_INVALID_PARAMETERS, /* Invalid parameters. */
LTTCOMM_CONSUMERD_TRACE_CHUNK_EXISTS_LOCAL, /* Trace chunk exists on consumer daemon. */
LTTCOMM_CONSUMERD_TRACE_CHUNK_EXISTS_REMOTE,/* Trace chunk exists on relay daemon. */
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
} addr;
-} LTTNG_PACKED;
+};
struct lttcomm_sock {
int32_t fd;
enum lttcomm_sock_proto proto;
struct lttcomm_sockaddr sockaddr;
const struct lttcomm_proto_ops *ops;
-} LTTNG_PACKED;
+};
/*
* Relayd sock. Adds the protocol version to use for the communications with
struct lttcomm_sock sock;
uint32_t major;
uint32_t minor;
-} LTTNG_PACKED;
+};
struct lttcomm_net_family {
int family;
/* Event data */
struct {
char channel_name[LTTNG_SYMBOL_NAME_LEN];
- struct lttng_event event LTTNG_PACKED;
- /* Length of following filter expression. */
- uint32_t expression_len;
- /* Length of following bytecode for filter. */
- uint32_t bytecode_len;
- /* Exclusion count (fixed-size strings). */
- uint32_t exclusion_count;
- /* Userspace probe location size. */
- uint32_t userspace_probe_location_len;
- /*
- * After this structure, the following variable-length
- * items are transmitted:
- * - char exclusion_names[LTTNG_SYMBOL_NAME_LEN][exclusion_count]
- * - char filter_expression[expression_len]
- * - unsigned char filter_bytecode[bytecode_len]
- */
+ uint32_t length;
} LTTNG_PACKED enable;
struct {
char channel_name[LTTNG_SYMBOL_NAME_LEN];
- struct lttng_event event LTTNG_PACKED;
- /* Length of following filter expression. */
- uint32_t expression_len;
- /* Length of following bytecode for filter. */
- uint32_t bytecode_len;
- /*
- * After this structure, the following variable-length
- * items are transmitted:
- * - unsigned char filter_expression[expression_len]
- * - unsigned char filter_bytecode[bytecode_len]
- */
+ uint32_t length;
} LTTNG_PACKED disable;
/* Create channel */
struct {
- struct lttng_channel chan LTTNG_PACKED;
- /* struct lttng_channel_extended is already packed. */
- struct lttng_channel_extended extended;
+ uint32_t length;
} LTTNG_PACKED channel;
/* Context */
struct {
char channel_name[LTTNG_SYMBOL_NAME_LEN];
- struct lttng_event_context ctx LTTNG_PACKED;
- uint32_t provider_name_len;
- uint32_t context_name_len;
+ uint32_t length;
} LTTNG_PACKED context;
/* Use by register_consumer */
struct {
uint32_t size;
} LTTNG_PACKED uri;
struct {
- struct lttng_snapshot_output output LTTNG_PACKED;
+ struct lttng_snapshot_output output;
} LTTNG_PACKED snapshot_output;
struct {
uint32_t wait;
- struct lttng_snapshot_output output LTTNG_PACKED;
+ struct lttng_snapshot_output output;
} LTTNG_PACKED snapshot_record;
struct {
uint32_t nb_uri;
unsigned int timer_interval; /* usec */
} LTTNG_PACKED session_live;
struct {
- struct lttng_save_session_attr attr; /* struct already packed */
+ struct lttng_save_session_attr attr;
} LTTNG_PACKED save_session;
struct {
char shm_path[PATH_MAX];
} LTTNG_PACKED process_attr_tracker_set_tracking_policy;
struct {
uint32_t length;
+ uint8_t is_trigger_anonymous;
} LTTNG_PACKED trigger;
+ struct {
+ uint32_t length;
+ } LTTNG_PACKED error_query;
struct {
uint64_t rotation_id;
} LTTNG_PACKED get_rotation_info;
/* An lttng_session_descriptor follows. */
} LTTNG_PACKED create_session;
} u;
+ /* Count of fds sent. */
+ uint32_t fd_count;
} LTTNG_PACKED;
#define LTTNG_FILTER_MAX_LEN 65536
* starts at reloc_table_offset.
*/
#define LTTNG_FILTER_PADDING 32
-struct lttng_filter_bytecode {
+struct lttng_bytecode {
uint32_t len; /* len of data */
uint32_t reloc_table_offset;
uint64_t seqnum;
struct lttng_event_exclusion {
uint32_t count;
char padding[LTTNG_EVENT_EXCLUSION_PADDING];
- char names[0][LTTNG_SYMBOL_NAME_LEN];
+ char names[][LTTNG_SYMBOL_NAME_LEN];
} LTTNG_PACKED;
#define LTTNG_EVENT_EXCLUSION_NAME_AT(_exclusion, _i) \
- (&(_exclusion)->names[_i][0])
+ ((_exclusion)->names[_i])
/*
- * Event command header.
+ * Listing command header.
*/
-struct lttcomm_event_command_header {
- /* Number of events */
- uint32_t nb_events;
+struct lttcomm_list_command_header {
+ /* Number of elements */
+ uint32_t count;
} LTTNG_PACKED;
/*
struct {
uint64_t net_index;
enum lttng_stream_type type;
- /* Open socket to the relayd */
- struct lttcomm_relayd_sock sock;
+ uint32_t major;
+ uint32_t minor;
+ uint8_t relayd_socket_protocol;
/* Tracing session id associated to the relayd. */
uint64_t session_id;
/* Relayd session id, only used with control socket. */
uint32_t handle;
uint32_t cmd;
union {
- struct lttng_ust_channel channel;
- struct lttng_ust_stream stream;
- struct lttng_ust_event event;
- struct lttng_ust_context context;
- struct lttng_ust_tracer_version version;
+ struct lttng_ust_abi_channel channel;
+ struct lttng_ust_abi_stream stream;
+ struct lttng_ust_abi_event event;
+ struct lttng_ust_abi_context context;
+ struct lttng_ust_abi_tracer_version version;
} u;
} LTTNG_PACKED;
struct {
uint64_t memory_map_size;
} LTTNG_PACKED stream;
- struct lttng_ust_tracer_version version;
+ struct lttng_ust_abi_tracer_version version;
} u;
} LTTNG_PACKED;
#endif /* HAVE_LIBLTTNG_UST_CTL */
-LTTNG_HIDDEN const char *lttcomm_get_readable_code(enum lttcomm_return_code code);
+const char *lttcomm_get_readable_code(enum lttcomm_return_code code);
-LTTNG_HIDDEN int lttcomm_init_inet_sockaddr(struct lttcomm_sockaddr *sockaddr,
+int lttcomm_init_inet_sockaddr(struct lttcomm_sockaddr *sockaddr,
const char *ip, unsigned int port);
-LTTNG_HIDDEN int lttcomm_init_inet6_sockaddr(struct lttcomm_sockaddr *sockaddr,
+int lttcomm_init_inet6_sockaddr(struct lttcomm_sockaddr *sockaddr,
const char *ip, unsigned int port);
-LTTNG_HIDDEN struct lttcomm_sock *lttcomm_alloc_sock(enum lttcomm_sock_proto proto);
-LTTNG_HIDDEN int lttcomm_create_sock(struct lttcomm_sock *sock);
-LTTNG_HIDDEN struct lttcomm_sock *lttcomm_alloc_sock_from_uri(struct lttng_uri *uri);
-LTTNG_HIDDEN void lttcomm_destroy_sock(struct lttcomm_sock *sock);
-LTTNG_HIDDEN struct lttcomm_sock *lttcomm_alloc_copy_sock(struct lttcomm_sock *src);
-LTTNG_HIDDEN void lttcomm_copy_sock(struct lttcomm_sock *dst,
+struct lttcomm_sock *lttcomm_alloc_sock(enum lttcomm_sock_proto proto);
+int lttcomm_populate_sock_from_open_socket(struct lttcomm_sock *sock,
+ int fd,
+ enum lttcomm_sock_proto protocol);
+int lttcomm_create_sock(struct lttcomm_sock *sock);
+struct lttcomm_sock *lttcomm_alloc_sock_from_uri(struct lttng_uri *uri);
+void lttcomm_destroy_sock(struct lttcomm_sock *sock);
+struct lttcomm_sock *lttcomm_alloc_copy_sock(struct lttcomm_sock *src);
+void lttcomm_copy_sock(struct lttcomm_sock *dst,
struct lttcomm_sock *src);
/* Relayd socket object. */
-LTTNG_HIDDEN struct lttcomm_relayd_sock *lttcomm_alloc_relayd_sock(
+struct lttcomm_relayd_sock *lttcomm_alloc_relayd_sock(
struct lttng_uri *uri, uint32_t major, uint32_t minor);
-LTTNG_HIDDEN int lttcomm_setsockopt_rcv_timeout(int sock, unsigned int msec);
-LTTNG_HIDDEN int lttcomm_setsockopt_snd_timeout(int sock, unsigned int msec);
+int lttcomm_setsockopt_rcv_timeout(int sock, unsigned int msec);
+int lttcomm_setsockopt_snd_timeout(int sock, unsigned int msec);
-LTTNG_HIDDEN int lttcomm_sock_get_port(const struct lttcomm_sock *sock,
+int lttcomm_sock_get_port(const struct lttcomm_sock *sock,
uint16_t *port);
/*
* Set a port to an lttcomm_sock. This will have no effect is the socket is
* already bound.
*/
-LTTNG_HIDDEN int lttcomm_sock_set_port(struct lttcomm_sock *sock, uint16_t port);
+int lttcomm_sock_set_port(struct lttcomm_sock *sock, uint16_t port);
-LTTNG_HIDDEN void lttcomm_init(void);
+void lttcomm_init(void);
/* Get network timeout, in milliseconds */
-LTTNG_HIDDEN unsigned long lttcomm_get_network_timeout(void);
+unsigned long lttcomm_get_network_timeout(void);
#endif /* _LTTNG_SESSIOND_COMM_H */