X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Fsessiond-comm.h;h=8b1757438de448096337b7ae820513e59ae23891;hp=56c925973038f51ea571a7ee177071e20ce5cb2a;hb=8614e600d7a8dc653c473254fc302870d73f32ae;hpb=56f0bc67599b5438a4b68bdbec596aaaa39b2e7e diff --git a/src/common/sessiond-comm/sessiond-comm.h b/src/common/sessiond-comm/sessiond-comm.h index 56c925973..8b1757438 100644 --- a/src/common/sessiond-comm/sessiond-comm.h +++ b/src/common/sessiond-comm/sessiond-comm.h @@ -35,7 +35,9 @@ #include #include #include -#include +#include +#include +#include #include #include @@ -67,7 +69,7 @@ enum lttcomm_sessiond_command { LTTNG_ENABLE_EVENT = 6, /* 7 */ /* Session daemon command */ - LTTNG_CREATE_SESSION = 8, + /* 8 */ LTTNG_DESTROY_SESSION = 9, LTTNG_LIST_CHANNELS = 10, LTTNG_LIST_DOMAINS = 11, @@ -90,8 +92,8 @@ enum lttcomm_sessiond_command { LTTNG_SNAPSHOT_DEL_OUTPUT = 26, LTTNG_SNAPSHOT_LIST_OUTPUT = 27, LTTNG_SNAPSHOT_RECORD = 28, - LTTNG_CREATE_SESSION_SNAPSHOT = 29, - LTTNG_CREATE_SESSION_LIVE = 30, + /* 29 */ + /* 30 */ LTTNG_SAVE_SESSION = 31, LTTNG_TRACK_PID = 32, LTTNG_UNTRACK_PID = 33, @@ -104,8 +106,9 @@ enum lttcomm_sessiond_command { LTTNG_ROTATE_SESSION = 45, LTTNG_ROTATION_GET_INFO = 46, LTTNG_ROTATION_SET_SCHEDULE = 47, - LTTNG_SESSION_GET_CURRENT_OUTPUT = 48, - LTTNG_SESSION_LIST_ROTATION_SCHEDULES = 49, + LTTNG_SESSION_LIST_ROTATION_SCHEDULES = 48, + LTTNG_CREATE_SESSION_EXT = 49, + LTTNG_CLEAR_SESSION = 50, }; enum lttcomm_relayd_command { @@ -129,14 +132,18 @@ enum lttcomm_relayd_command { RELAYD_STREAMS_SENT = 16, /* Ask the relay to reset the metadata trace file (2.8+) */ RELAYD_RESET_METADATA = 17, - /* Ask the relay to rotate a stream file (2.11+) */ - RELAYD_ROTATE_STREAM = 18, - /* Rename a chunk after the rotation is completed (2.11+) */ - RELAYD_ROTATE_RENAME = 19, - /* Check if a chunk has data pending (2.11+) */ - RELAYD_ROTATE_PENDING = 20, - /* Create a folder on the relayd FS (2.11+) */ - RELAYD_MKDIR = 21, + /* Ask the relay to rotate a set of stream files (2.11+) */ + RELAYD_ROTATE_STREAMS = 18, + /* Ask the relay to create a trace chunk (2.11+) */ + RELAYD_CREATE_TRACE_CHUNK = 19, + /* Ask the relay to close a trace chunk (2.11+) */ + RELAYD_CLOSE_TRACE_CHUNK = 20, + /* Ask the relay whether a trace chunk exists (2.11+) */ + RELAYD_TRACE_CHUNK_EXISTS = 21, + /* Get the current configuration of a relayd peer (2.12+) */ + RELAYD_GET_CONFIGURATION = 22, + + /* Feature branch specific commands start at 10000. */ }; /* @@ -144,7 +151,13 @@ enum lttcomm_relayd_command { */ enum lttcomm_return_code { LTTCOMM_CONSUMERD_SUCCESS = 0, /* Everything went fine. */ - LTTCOMM_CONSUMERD_COMMAND_SOCK_READY = 1, /* Command socket ready */ + /* + * Some code paths use -1 to express an error, others + * negate this consumer return code. Starting codes at + * 100 ensures there is no mix-up between this error value + * and legitimate status codes. + */ + LTTCOMM_CONSUMERD_COMMAND_SOCK_READY = 100, /* Command socket ready */ LTTCOMM_CONSUMERD_SUCCESS_RECV_FD, /* Success on receiving fds */ LTTCOMM_CONSUMERD_ERROR_RECV_FD, /* Error on receiving fds */ LTTCOMM_CONSUMERD_ERROR_RECV_CMD, /* Error on receiving command */ @@ -165,6 +178,15 @@ enum lttcomm_return_code { LTTCOMM_CONSUMERD_CHANNEL_FAIL, /* Channel creation failed. */ LTTCOMM_CONSUMERD_CHAN_NOT_FOUND, /* Channel not found. */ LTTCOMM_CONSUMERD_ALREADY_SET, /* Resource already set. */ + 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_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. */ + LTTCOMM_CONSUMERD_UNKNOWN_TRACE_CHUNK, /* Unknown trace chunk. */ + LTTCOMM_CONSUMERD_RELAYD_CLEAR_DISALLOWED, /* Relayd does not accept clear command. */ /* MUST be last element */ LTTCOMM_NR, /* Last element */ @@ -350,10 +372,22 @@ struct lttcomm_session_msg { uint8_t set; uint64_t value; } LTTNG_PACKED rotation_set_schedule; + struct { + /* + * Includes the null-terminator. + * Must be an absolute path. + * + * Size bounded by LTTNG_PATH_MAX. + */ + uint16_t home_dir_size; + uint64_t session_descriptor_size; + /* An lttng_session_descriptor follows. */ + } LTTNG_PACKED create_session; } u; } LTTNG_PACKED; #define LTTNG_FILTER_MAX_LEN 65536 +#define LTTNG_SESSION_DESCRIPTOR_MAX_LEN 65536 /* * Filter bytecode data. The reloc table is located at the end of the @@ -417,6 +451,14 @@ struct lttcomm_event_extended_header { uint32_t userspace_probe_location_len; } LTTNG_PACKED; +/* + * Command header of the reply to an LTTNG_DESTROY_SESSION command. + */ +struct lttcomm_session_destroy_command_header { + /* enum lttng_session */ + int32_t rotation_state; +}; + /* * Data structure for the response from sessiond to the lttng client. */ @@ -438,14 +480,14 @@ struct lttcomm_lttng_output_id { * operation. */ struct lttcomm_consumer_msg { - uint32_t cmd_type; /* enum consumerd_command */ + uint32_t cmd_type; /* enum lttng_consumer_command */ union { struct { uint64_t channel_key; uint64_t session_id; + /* ID of the session's current trace chunk. */ + LTTNG_OPTIONAL_COMM(uint64_t) LTTNG_PACKED chunk_id; char pathname[PATH_MAX]; - uint32_t uid; - uint32_t gid; uint64_t relayd_id; /* nb_init_streams is the number of streams open initially. */ uint32_t nb_init_streams; @@ -468,13 +510,6 @@ struct lttcomm_consumer_msg { int32_t cpu; /* On which CPU this stream is assigned. */ /* Tells the consumer if the stream should be or not monitored. */ uint32_t no_monitor; - /* - * The archive id that was "current" at the time this - * stream was created. This is used to determine - * whether a rotation request was sent before or after - * the creation of a stream. - */ - uint64_t trace_archive_id; } LTTNG_PACKED stream; /* Only used by Kernel. */ struct { uint64_t net_index; @@ -505,11 +540,16 @@ struct lttcomm_consumer_msg { uint64_t session_id; /* Tracing session id */ char pathname[PATH_MAX]; /* Channel file path. */ char name[LTTNG_SYMBOL_NAME_LEN]; /* Channel name. */ - uint32_t uid; /* User ID of the session */ - uint32_t gid; /* Group ID ot the session */ + /* Credentials used to open the UST buffer shared mappings. */ + struct { + uint32_t uid; + uint32_t gid; + } LTTNG_PACKED buffer_credentials; uint64_t relayd_id; /* Relayd id if apply. */ uint64_t key; /* Unique channel key. */ - unsigned char uuid[UUID_LEN]; /* uuid for ust tracer. */ + /* ID of the session's current trace chunk. */ + LTTNG_OPTIONAL_COMM(uint64_t) LTTNG_PACKED chunk_id; + unsigned char uuid[LTTNG_UUID_LEN]; /* uuid for ust tracer. */ uint32_t chan_id; /* Channel ID on the tracer side. */ uint64_t tracefile_size; /* bytes */ uint32_t tracefile_count; /* number of tracefiles */ @@ -524,13 +564,6 @@ struct lttcomm_consumer_msg { */ uint32_t ust_app_uid; int64_t blocking_timeout; - /* - * The archive id that was "current" at the time this - * channel was created. This is used to determine - * whether a rotation request was sent before or after - * the creation of a channel. - */ - uint64_t trace_archive_id; char root_shm_path[PATH_MAX]; char shm_path[PATH_MAX]; } LTTNG_PACKED ask_channel; @@ -566,12 +599,6 @@ struct lttcomm_consumer_msg { uint64_t relayd_id; /* Relayd id if apply. */ uint64_t key; uint64_t nb_packets_per_stream; - /* - * The session's current trace archive id is propagated - * since a snapshot triggers the creation of an - * ephemeral metadata stream. - */ - uint64_t trace_archive_id; } LTTNG_PACKED snapshot_channel; struct { uint64_t channel_key; @@ -589,32 +616,59 @@ struct lttcomm_consumer_msg { uint64_t session_id; } LTTNG_PACKED regenerate_metadata; struct { - char pathname[PATH_MAX]; uint32_t metadata; /* This is a metadata channel. */ uint64_t relayd_id; /* Relayd id if apply. */ uint64_t key; - uint64_t new_chunk_id; } LTTNG_PACKED rotate_channel; struct { - char old_path[LTTNG_PATH_MAX]; - char new_path[LTTNG_PATH_MAX]; - uint64_t relayd_id; /* Relayd id if apply. */ uint64_t session_id; - uint32_t uid; - uint32_t gid; - } LTTNG_PACKED rotate_rename; + uint64_t chunk_id; + } LTTNG_PACKED check_rotation_pending_local; struct { uint64_t relayd_id; uint64_t session_id; uint64_t chunk_id; - } LTTNG_PACKED rotate_pending_relay; + } LTTNG_PACKED check_rotation_pending_relay; struct { - char path[LTTNG_PATH_MAX]; - uint64_t relayd_id; /* Relayd id if apply. */ + /* + * Relayd id, if applicable (remote). + * + * A directory file descriptor referring to the chunk's + * output folder is transmitted if the chunk is local + * (relayd_id unset). + * + * `override_name` is left NULL (all-zeroes) if the + * chunk's name is not overridden. + */ + LTTNG_OPTIONAL_COMM(uint64_t) LTTNG_PACKED relayd_id; + char override_name[LTTNG_NAME_MAX]; + uint64_t session_id; + uint64_t chunk_id; + uint64_t creation_timestamp; + LTTNG_OPTIONAL_COMM(struct { + uint32_t uid; + uint32_t gid; + } LTTNG_PACKED ) LTTNG_PACKED credentials; + } LTTNG_PACKED create_trace_chunk; + struct { + LTTNG_OPTIONAL_COMM(uint64_t) LTTNG_PACKED relayd_id; + uint64_t session_id; + uint64_t chunk_id; + uint64_t close_timestamp; + /* enum lttng_trace_chunk_command_type */ + LTTNG_OPTIONAL_COMM(uint32_t) LTTNG_PACKED close_command; + } LTTNG_PACKED close_trace_chunk; + struct { + LTTNG_OPTIONAL_COMM(uint64_t) LTTNG_PACKED relayd_id; uint64_t session_id; - uint32_t uid; - uint32_t gid; - } LTTNG_PACKED mkdir; + uint64_t chunk_id; + } LTTNG_PACKED trace_chunk_exists; + struct { + lttng_uuid sessiond_uuid; + } LTTNG_PACKED init; + struct { + uint64_t key; + } LTTNG_PACKED clear_channel; } u; } LTTNG_PACKED; @@ -648,6 +702,12 @@ struct lttcomm_consumer_status_channel { unsigned int stream_count; } LTTNG_PACKED; +struct lttcomm_consumer_close_trace_chunk_reply { + enum lttcomm_return_code ret_code; + uint32_t path_length; + char path[]; +}; + #ifdef HAVE_LIBLTTNG_UST_CTL #include