X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Fsessiond-comm.h;h=e7fd69ddd4388f6e288a8cacdf12fd9924f36b4d;hp=07c3ff1f5249146d311df90b44664a38b36d16c8;hb=2038dd6ce78bc856ece474626b7f039d19860bce;hpb=2bba9e532ca1910822005ff7f67400a2e871467c diff --git a/src/common/sessiond-comm/sessiond-comm.h b/src/common/sessiond-comm/sessiond-comm.h index 07c3ff1f5..e7fd69ddd 100644 --- a/src/common/sessiond-comm/sessiond-comm.h +++ b/src/common/sessiond-comm/sessiond-comm.h @@ -6,12 +6,12 @@ * 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 * 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., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -25,10 +25,10 @@ #ifndef _LTTNG_SESSIOND_COMM_H #define _LTTNG_SESSIOND_COMM_H -#define _GNU_SOURCE #include #include #include +#include #include #include #include @@ -40,7 +40,7 @@ #include "inet.h" #include "inet6.h" -#include "unix.h" +#include /* Queue size of listen(2) */ #define LTTNG_SESSIOND_COMM_MAX_LISTEN 64 @@ -59,10 +59,10 @@ enum lttcomm_sessiond_command { LTTNG_CALIBRATE = 1, LTTNG_DISABLE_CHANNEL = 2, LTTNG_DISABLE_EVENT = 3, - LTTNG_DISABLE_ALL_EVENT = 4, + LTTNG_LIST_SYSCALLS = 4, LTTNG_ENABLE_CHANNEL = 5, LTTNG_ENABLE_EVENT = 6, - LTTNG_ENABLE_ALL_EVENT = 7, + /* 7 */ /* Session daemon command */ LTTNG_CREATE_SESSION = 8, LTTNG_DESTROY_SESSION = 9, @@ -80,13 +80,21 @@ enum lttcomm_sessiond_command { LTTNG_DISABLE_CONSUMER = 19, LTTNG_ENABLE_CONSUMER = 20, LTTNG_SET_CONSUMER_URI = 21, - LTTNG_ENABLE_EVENT_WITH_FILTER = 22, - LTTNG_HEALTH_CHECK = 23, + /* 22 */ + /* 23 */ LTTNG_DATA_PENDING = 24, LTTNG_SNAPSHOT_ADD_OUTPUT = 25, LTTNG_SNAPSHOT_DEL_OUTPUT = 26, LTTNG_SNAPSHOT_LIST_OUTPUT = 27, LTTNG_SNAPSHOT_RECORD = 28, + LTTNG_CREATE_SESSION_SNAPSHOT = 29, + LTTNG_CREATE_SESSION_LIVE = 30, + LTTNG_SAVE_SESSION = 31, + LTTNG_TRACK_PID = 32, + LTTNG_UNTRACK_PID = 33, + LTTNG_LIST_TRACKER_PIDS = 34, + LTTNG_SET_SESSION_SHM_PATH = 40, + LTTNG_METADATA_REGENERATE = 41, }; enum lttcomm_relayd_command { @@ -101,12 +109,22 @@ enum lttcomm_relayd_command { RELAYD_QUIESCENT_CONTROL = 9, RELAYD_BEGIN_DATA_PENDING = 10, RELAYD_END_DATA_PENDING = 11, + RELAYD_ADD_INDEX = 12, + RELAYD_SEND_INDEX = 13, + RELAYD_CLOSE_INDEX = 14, + /* Live-reading commands (2.4+). */ + RELAYD_LIST_SESSIONS = 15, + /* All streams of the channel have been sent to the relayd (2.4+). */ + RELAYD_STREAMS_SENT = 16, + /* Ask the relay to reset the metadata trace file (2.8+) */ + RELAYD_RESET_METADATA = 17, }; /* * lttcomm error code. */ enum lttcomm_return_code { + LTTCOMM_CONSUMERD_SUCCESS = 0, /* Everything went fine. */ LTTCOMM_CONSUMERD_COMMAND_SOCK_READY = 1, /* Command socket ready */ LTTCOMM_CONSUMERD_SUCCESS_RECV_FD, /* Success on receiving fds */ LTTCOMM_CONSUMERD_ERROR_RECV_FD, /* Error on receiving fds */ @@ -124,6 +142,9 @@ enum lttcomm_return_code { LTTCOMM_CONSUMERD_ENOMEM, /* Consumer is out of memory */ LTTCOMM_CONSUMERD_ERROR_METADATA, /* Error with metadata. */ LTTCOMM_CONSUMERD_FATAL, /* Fatal error. */ + LTTCOMM_CONSUMERD_RELAYD_FAIL, /* Error on remote relayd */ + LTTCOMM_CONSUMERD_CHANNEL_FAIL, /* Channel creation failed. */ + LTTCOMM_CONSUMERD_CHAN_NOT_FOUND, /* Channel not found. */ /* MUST be last element */ LTTCOMM_NR, /* Last element */ @@ -155,7 +176,8 @@ enum lttcomm_metadata_command { * per PID registry indexed by session id ignoring the other values. */ struct lttcomm_metadata_request_msg { - unsigned int session_id; /* Tracing session id */ + uint64_t session_id; /* Tracing session id */ + uint64_t session_id_per_pid; /* Tracing session id for per-pid */ uint32_t bits_per_long; /* Consumer ABI */ uint32_t uid; uint64_t key; /* Metadata channel key. */ @@ -199,8 +221,8 @@ struct lttcomm_proto_ops { 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); + ssize_t (*sendmsg) (struct lttcomm_sock *sock, const void *buf, + size_t len, int flags); }; /* @@ -211,25 +233,48 @@ struct lttcomm_session_msg { struct lttng_session session; struct lttng_domain domain; union { - struct { - char channel_name[LTTNG_SYMBOL_NAME_LEN]; - char name[NAME_MAX]; - } LTTNG_PACKED disable; /* Event data */ struct { char channel_name[LTTNG_SYMBOL_NAME_LEN]; - struct lttng_event event; + 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 data */ + uint32_t exclusion_count; + /* + * After this structure, the following variable-length + * items are transmitted: + * - char exclusion_names[LTTNG_SYMBOL_NAME_LEN][exclusion_count] + * - unsigned char filter_expression[expression_len] + * - unsigned char filter_bytecode[bytecode_len] + */ } 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] + */ + } LTTNG_PACKED disable; /* Create channel */ struct { - struct lttng_channel chan; + struct lttng_channel chan LTTNG_PACKED; } LTTNG_PACKED channel; /* Context */ struct { char channel_name[LTTNG_SYMBOL_NAME_LEN]; - struct lttng_event_context ctx; + struct lttng_event_context ctx LTTNG_PACKED; + uint32_t provider_name_len; + uint32_t context_name_len; } LTTNG_PACKED context; /* Use by register_consumer */ struct { @@ -246,12 +291,25 @@ struct lttcomm_session_msg { uint32_t size; } LTTNG_PACKED uri; struct { - struct lttng_snapshot_output output; + struct lttng_snapshot_output output LTTNG_PACKED; } LTTNG_PACKED snapshot_output; struct { uint32_t wait; - struct lttng_snapshot_output output; + struct lttng_snapshot_output output LTTNG_PACKED; } 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 */ + } LTTNG_PACKED save_session; + struct { + char shm_path[PATH_MAX]; + } LTTNG_PACKED set_shm_path; + struct { + uint32_t pid; + } LTTNG_PACKED pid_tracker; } u; } LTTNG_PACKED; @@ -271,6 +329,57 @@ struct lttng_filter_bytecode { char data[0]; } LTTNG_PACKED; +/* + * Event exclusion data. At the end of the structure, there will actually + * by zero or more names, where the actual number of names is given by + * the 'count' item of the structure. + */ +#define LTTNG_EVENT_EXCLUSION_PADDING 32 +struct lttng_event_exclusion { + uint32_t count; + char padding[LTTNG_EVENT_EXCLUSION_PADDING]; + char names[0][LTTNG_SYMBOL_NAME_LEN]; +} LTTNG_PACKED; + +#define LTTNG_EVENT_EXCLUSION_NAME_AT(_exclusion, _i) \ + (&(_exclusion)->names[_i][0]) + +/* + * Event command header. + */ +struct lttcomm_event_command_header { + /* Number of events */ + uint32_t nb_events; +} LTTNG_PACKED; + +/* + * Event extended info header. This is the structure preceding each + * extended info data. + */ +struct lttcomm_event_extended_header { + /* + * Size of filter string immediately following this header. + * This size includes the terminal null character. + */ + uint32_t filter_len; + + /* + * Number of exclusion names, immediately following the filter + * string. Each exclusion name has a fixed length of + * LTTNG_SYMBOL_NAME_LEN bytes, including the terminal null + * character. + */ + uint32_t nb_exclusions; +} LTTNG_PACKED; + +/* + * Channel extended info. + */ +struct lttcomm_channel_extended { + uint64_t discarded_events; + uint64_t lost_packets; +} LTTNG_PACKED; + /* * Data structure for the response from sessiond to the lttng client. */ @@ -278,24 +387,14 @@ struct lttcomm_lttng_msg { uint32_t cmd_type; /* enum lttcomm_sessiond_command */ uint32_t ret_code; /* enum lttcomm_return_code */ uint32_t pid; /* pid_t */ + uint32_t cmd_header_size; uint32_t data_size; - /* Contains: trace_name + data */ - char payload[]; } LTTNG_PACKED; struct lttcomm_lttng_output_id { uint32_t id; } LTTNG_PACKED; -struct lttcomm_health_msg { - uint32_t component; - uint32_t cmd; -} LTTNG_PACKED; - -struct lttcomm_health_data { - uint32_t ret_code; -} LTTNG_PACKED; - /* * lttcomm_consumer_msg is the message sent from sessiond to consumerd * to either add a channel, add a stream, update a stream, or stop @@ -321,6 +420,8 @@ struct lttcomm_consumer_msg { uint32_t tracefile_count; /* number of tracefiles */ /* If the channel's streams have to be monitored or not. */ uint32_t monitor; + /* timer to check the streams usage in live mode (usec). */ + unsigned int live_timer_interval; } LTTNG_PACKED channel; /* Only used by Kernel. */ struct { uint64_t stream_key; @@ -336,6 +437,8 @@ struct lttcomm_consumer_msg { struct lttcomm_relayd_sock sock; /* Tracing session id associated to the relayd. */ uint64_t session_id; + /* Relayd session id, only used with control socket. */ + uint64_t relayd_session_id; } LTTNG_PACKED relayd_sock; struct { uint64_t net_seq_idx; @@ -349,6 +452,7 @@ struct lttcomm_consumer_msg { int32_t overwrite; /* 1: overwrite, 0: discard */ uint32_t switch_timer_interval; /* usec */ uint32_t read_timer_interval; /* usec */ + unsigned int live_timer_interval; /* usec */ int32_t output; /* splice, mmap */ int32_t type; /* metadata or per_cpu */ uint64_t session_id; /* Tracing session id */ @@ -362,8 +466,18 @@ struct lttcomm_consumer_msg { uint32_t chan_id; /* Channel ID on the tracer side. */ uint64_t tracefile_size; /* bytes */ uint32_t tracefile_count; /* number of tracefiles */ + uint64_t session_id_per_pid; /* Per-pid session ID. */ /* Tells the consumer if the stream should be or not monitored. */ uint32_t monitor; + /* + * For UST per UID buffers, this is the application UID of the + * channel. This can be different from the user UID requesting the + * channel creation and used for the rights on the stream file + * because the application can be in the tracing for instance. + */ + uint32_t ust_app_uid; + char root_shm_path[PATH_MAX]; + char shm_path[PATH_MAX]; } LTTNG_PACKED ask_channel; struct { uint64_t key; @@ -375,6 +489,7 @@ struct lttcomm_consumer_msg { uint64_t key; /* Metadata channel key. */ uint64_t target_offset; /* Offset in the consumer */ uint64_t len; /* Length of metadata to be received. */ + uint64_t version; /* Version of the metadata. */ } LTTNG_PACKED push_metadata; struct { uint64_t key; /* Metadata channel key. */ @@ -392,8 +507,23 @@ struct lttcomm_consumer_msg { uint32_t metadata; /* This a metadata snapshot. */ uint64_t relayd_id; /* Relayd id if apply. */ uint64_t key; - uint64_t max_size; + uint64_t nb_packets_per_stream; } LTTNG_PACKED snapshot_channel; + struct { + uint64_t channel_key; + uint64_t net_seq_idx; + } LTTNG_PACKED sent_streams; + struct { + uint64_t session_id; + uint64_t channel_key; + } LTTNG_PACKED discarded_events; + struct { + uint64_t session_id; + uint64_t channel_key; + } LTTNG_PACKED lost_packets; + struct { + uint64_t session_id; + } LTTNG_PACKED metadata_regenerate; } u; } LTTNG_PACKED; @@ -401,11 +531,11 @@ struct lttcomm_consumer_msg { * Status message returned to the sessiond after a received command. */ struct lttcomm_consumer_status_msg { - enum lttng_error_code ret_code; + enum lttcomm_return_code ret_code; } LTTNG_PACKED; struct lttcomm_consumer_status_channel { - enum lttng_error_code ret_code; + enum lttcomm_return_code ret_code; uint64_t key; unsigned int stream_count; } LTTNG_PACKED; @@ -470,4 +600,11 @@ extern void lttcomm_copy_sock(struct lttcomm_sock *dst, extern struct lttcomm_relayd_sock *lttcomm_alloc_relayd_sock( struct lttng_uri *uri, uint32_t major, uint32_t minor); +extern int lttcomm_setsockopt_rcv_timeout(int sock, unsigned int msec); +extern int lttcomm_setsockopt_snd_timeout(int sock, unsigned int msec); + +extern void lttcomm_init(void); +/* Get network timeout, in milliseconds */ +extern unsigned long lttcomm_get_network_timeout(void); + #endif /* _LTTNG_SESSIOND_COMM_H */