X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Frelayd.h;h=fe7d2936d869a0f03dcc82078b005d3592cdbd90;hp=aa99248fb45de4bf920f5571a522d4a357f71edd;hb=d3219302b0e0c9dda470d73a7b9ee48e759756b5;hpb=f90903320ddb2983ee03c6472802bb7ad2ccfaea diff --git a/src/common/sessiond-comm/relayd.h b/src/common/sessiond-comm/relayd.h index aa99248fb..fe7d2936d 100644 --- a/src/common/sessiond-comm/relayd.h +++ b/src/common/sessiond-comm/relayd.h @@ -1,34 +1,31 @@ /* - * Copyright (C) 2012 - David Goulet - * Julien Desfossez + * Copyright (C) 2012 David Goulet + * Copyright (C) 2012 Julien Desfossez * - * 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. + * SPDX-License-Identifier: GPL-2.0-only * - * 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. */ #ifndef _RELAYD_COMM #define _RELAYD_COMM -#define _GNU_SOURCE - #include #include #include #include +#include +#include +#include +#include -#define RELAYD_VERSION_COMM_MAJOR 2 -#define RELAYD_VERSION_COMM_MINOR 2 +#define RELAYD_VERSION_COMM_MAJOR VERSION_MAJOR +#define RELAYD_VERSION_COMM_MINOR VERSION_MINOR + +#define RELAYD_COMM_LTTNG_HOST_NAME_MAX_2_4 64 +#define RELAYD_COMM_LTTNG_NAME_MAX_2_4 255 +#define RELAYD_COMM_LTTNG_PATH_MAX 4096 +#define RELAYD_COMM_DEFAULT_STREAM_NAME_LEN 264 /* 256 + 8 */ /* * lttng-relayd communication header. @@ -65,8 +62,8 @@ struct lttcomm_relayd_status_session { * Used to add a stream on the relay daemon. */ struct lttcomm_relayd_add_stream { - char channel_name[DEFAULT_STREAM_NAME_LEN]; - char pathname[PATH_MAX]; + char channel_name[RELAYD_COMM_DEFAULT_STREAM_NAME_LEN]; + char pathname[RELAYD_COMM_LTTNG_PATH_MAX]; } LTTNG_PACKED; /* @@ -74,10 +71,19 @@ struct lttcomm_relayd_add_stream { * Protocol version 2.2 */ struct lttcomm_relayd_add_stream_2_2 { - char channel_name[DEFAULT_STREAM_NAME_LEN]; - char pathname[PATH_MAX]; + char channel_name[RELAYD_COMM_DEFAULT_STREAM_NAME_LEN]; + char pathname[RELAYD_COMM_LTTNG_PATH_MAX]; + uint64_t tracefile_size; + uint64_t tracefile_count; +} LTTNG_PACKED; + +struct lttcomm_relayd_add_stream_2_11 { + uint32_t channel_name_len; + uint32_t pathname_len; uint64_t tracefile_size; uint64_t tracefile_count; + uint64_t trace_chunk_id; + char names[]; } LTTNG_PACKED; /* @@ -95,13 +101,6 @@ struct lttcomm_relayd_generic_reply { uint32_t ret_code; } LTTNG_PACKED; -/* - * Used to update synchronization information. - */ -struct lttcomm_relayd_update_sync_info { - /* TODO: fill the structure. Feature not implemented yet */ -} LTTNG_PACKED; - /* * Version command. */ @@ -148,4 +147,161 @@ struct lttcomm_relayd_quiescent_control { uint64_t stream_id; } LTTNG_PACKED; +/* + * Index data. + */ +struct lttcomm_relayd_index { + uint64_t relay_stream_id; + uint64_t net_seq_num; + uint64_t packet_size; + uint64_t content_size; + uint64_t timestamp_begin; + uint64_t timestamp_end; + uint64_t events_discarded; + uint64_t stream_id; + /* 2.8+ */ + uint64_t stream_instance_id; + uint64_t packet_seq_num; +} LTTNG_PACKED; + +static inline size_t lttcomm_relayd_index_len(uint32_t major, uint32_t minor) +{ + if (major == 1) { + switch (minor) { + case 0: + return offsetof(struct lttcomm_relayd_index, stream_id) + + member_sizeof(struct lttcomm_relayd_index, + stream_id); + case 1: + return offsetof(struct lttcomm_relayd_index, packet_seq_num) + + member_sizeof(struct lttcomm_relayd_index, + packet_seq_num); + default: + abort(); + } + } + abort(); +} + +/* + * Create session in 2.4 adds additionnal parameters for live reading. + */ +struct lttcomm_relayd_create_session_2_4 { + char session_name[RELAYD_COMM_LTTNG_NAME_MAX_2_4]; + char hostname[RELAYD_COMM_LTTNG_HOST_NAME_MAX_2_4]; + uint32_t live_timer; + uint32_t snapshot; +} LTTNG_PACKED; + +struct lttcomm_relayd_create_session_2_11 { + uint32_t session_name_len; + uint32_t hostname_len; + /* Optional, set to 0 to indicate it is not user-specified. */ + uint32_t base_path_len; + uint32_t live_timer; + uint8_t snapshot; + uint8_t session_name_contains_creation_time; + /* Sessiond instance UUID */ + lttng_uuid sessiond_uuid; + /* Sessiond session id */ + uint64_t session_id; + /* Session creation time, in seconds since UNIX Epoch. */ + uint64_t creation_time; + LTTNG_OPTIONAL_COMM(uint64_t) LTTNG_PACKED current_chunk_id; + /* Contains the session_name, hostname, base_path. */ + char names[]; +} LTTNG_PACKED; + +struct lttcomm_relayd_create_session_reply_2_11 { + struct lttcomm_relayd_status_session generic; + /* Includes the '\0' terminator. */ + uint32_t output_path_length; + char output_path[]; +} LTTNG_PACKED; + +/* + * Used to ask the relay to reset the metadata trace file (regeneration). + * Send the new version of the metadata (starts at 0). + */ +struct lttcomm_relayd_reset_metadata { + uint64_t stream_id; + uint64_t version; +} LTTNG_PACKED; + +struct lttcomm_relayd_stream_rotation_position { + uint64_t stream_id; + /* + * Sequence number of the first packet belonging to the new + * "destination" trace chunk to which the stream is rotating. + * + * Ignored for metadata streams. + */ + uint64_t rotate_at_seq_num; +} LTTNG_PACKED; + +struct lttcomm_relayd_rotate_streams { + uint32_t stream_count; + /* + * Streams can be rotated outside of a chunk but not be parented to + * a new chunk. + */ + LTTNG_OPTIONAL_COMM(uint64_t) new_chunk_id; + /* `stream_count` positions follow. */ + struct lttcomm_relayd_stream_rotation_position rotation_positions[]; +} LTTNG_PACKED; + +struct lttcomm_relayd_create_trace_chunk { + uint64_t chunk_id; + /* Seconds since EPOCH. */ + uint64_t creation_timestamp; + /* Includes trailing NULL. */ + uint32_t override_name_length; + char override_name[]; +} LTTNG_PACKED; + +struct lttcomm_relayd_close_trace_chunk { + uint64_t chunk_id; + /* Seconds since EPOCH. */ + uint64_t close_timestamp; + /* enum lttng_trace_chunk_command_type */ + LTTNG_OPTIONAL_COMM(uint32_t) LTTNG_PACKED close_command; +} LTTNG_PACKED; + +struct lttcomm_relayd_close_trace_chunk_reply { + struct lttcomm_relayd_generic_reply generic; + /* Includes trailing NULL. */ + uint32_t path_length; + char path[]; +} LTTNG_PACKED; + +struct lttcomm_relayd_trace_chunk_exists { + uint64_t chunk_id; +} LTTNG_PACKED; + +struct lttcomm_relayd_trace_chunk_exists_reply { + struct lttcomm_relayd_generic_reply generic; + uint8_t trace_chunk_exists; +} LTTNG_PACKED; + +enum lttcomm_relayd_configuration_flag { + /* The relay daemon (2.12) is configured to allow clear operations. */ + LTTCOMM_RELAYD_CONFIGURATION_FLAG_CLEAR_ALLOWED = (1 << 0), +}; + +struct lttcomm_relayd_get_configuration { + uint64_t query_flags; +} LTTNG_PACKED; + +/* + * Used to return a relay daemon's configuration in reply to the + * RELAYD_GET_CONFIGURATION command. + */ +struct lttcomm_relayd_get_configuration_reply { + struct lttcomm_relayd_generic_reply generic; + /* Set of lttcomm_relayd_configuration_flag. */ + uint64_t relayd_configuration_flags; + /* Optional variable-length payload. */ + char payload[]; +} LTTNG_PACKED; + #endif /* _RELAYD_COMM */