X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Frelayd.h;h=b09dd138dfb4777f46b533a694e21f19f2e93c8e;hp=b897714d719ea1e618af6f9b2695c46d301007da;hb=0b50e4b3fb9859af7072adcca784684834e5f8d1;hpb=6d805429e9cb049eb0c9205fcf742a53e3166caf diff --git a/src/common/sessiond-comm/relayd.h b/src/common/sessiond-comm/relayd.h index b897714d7..b09dd138d 100644 --- a/src/common/sessiond-comm/relayd.h +++ b/src/common/sessiond-comm/relayd.h @@ -19,15 +19,20 @@ #ifndef _RELAYD_COMM #define _RELAYD_COMM -#define _GNU_SOURCE - #include #include #include +#include +#include + +#define RELAYD_VERSION_COMM_MAJOR VERSION_MAJOR +#define RELAYD_VERSION_COMM_MINOR VERSION_MINOR -#define RELAYD_VERSION_COMM_MAJOR 2 -#define RELAYD_VERSION_COMM_MINOR 1 +#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. @@ -36,9 +41,9 @@ struct lttcomm_relayd_hdr { /* Circuit ID not used for now so always ignored */ uint64_t circuit_id; uint64_t data_size; /* data size following this header */ - uint32_t cmd; /* enum lttcomm_sessiond_command */ + uint32_t cmd; /* enum lttcomm_relayd_command */ uint32_t cmd_version; /* command version */ -} __attribute__ ((__packed__)); +} LTTNG_PACKED; /* * lttng-relayd data header. @@ -50,15 +55,43 @@ struct lttcomm_relayd_data_hdr { uint64_t net_seq_num; /* Network sequence number, per stream. */ uint32_t data_size; /* data size following this header */ uint32_t padding_size; /* Size of 0 padding the data */ -} __attribute__ ((__packed__)); +} LTTNG_PACKED; + +/* + * Reply from a create session command. + */ +struct lttcomm_relayd_status_session { + uint64_t session_id; + uint32_t ret_code; +} LTTNG_PACKED; /* * Used to add a stream on the relay daemon. */ struct lttcomm_relayd_add_stream { - char channel_name[LTTNG_SYMBOL_NAME_LEN]; - char pathname[PATH_MAX]; -} __attribute__ ((__packed__)); + char channel_name[RELAYD_COMM_DEFAULT_STREAM_NAME_LEN]; + char pathname[RELAYD_COMM_LTTNG_PATH_MAX]; +} LTTNG_PACKED; + +/* + * Used to add a stream on the relay daemon. + * Protocol version 2.2 + */ +struct lttcomm_relayd_add_stream_2_2 { + 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_archive_id; + char names[]; +} LTTNG_PACKED; /* * Answer from an add stream command. @@ -66,21 +99,14 @@ struct lttcomm_relayd_add_stream { struct lttcomm_relayd_status_stream { uint64_t handle; uint32_t ret_code; -} __attribute__ ((__packed__)); +} LTTNG_PACKED; /* * Used to return command code for command not needing special data. */ struct lttcomm_relayd_generic_reply { uint32_t ret_code; -} __attribute__ ((__packed__)); - -/* - * Used to update synchronization information. - */ -struct lttcomm_relayd_update_sync_info { - /* TODO: fill the structure. Feature not implemented yet */ -} __attribute__ ((__packed__)); +} LTTNG_PACKED; /* * Version command. @@ -88,7 +114,7 @@ struct lttcomm_relayd_update_sync_info { struct lttcomm_relayd_version { uint32_t major; uint32_t minor; -} __attribute__ ((__packed__)); +} LTTNG_PACKED; /* * Metadata payload used when metadata command is sent. @@ -97,7 +123,7 @@ struct lttcomm_relayd_metadata_payload { uint64_t stream_id; uint32_t padding_size; char payload[]; -} __attribute__ ((__packed__)); +} LTTNG_PACKED; /* * Used to indicate that a specific stream id can now be closed. @@ -105,7 +131,7 @@ struct lttcomm_relayd_metadata_payload { struct lttcomm_relayd_close_stream { uint64_t stream_id; uint64_t last_net_seq_num; /* sequence number of last packet */ -} __attribute__ ((__packed__)); +} LTTNG_PACKED; /* * Used to test if for a given stream id the data is pending on the relayd side @@ -114,6 +140,116 @@ struct lttcomm_relayd_close_stream { struct lttcomm_relayd_data_pending { uint64_t stream_id; uint64_t last_net_seq_num; /* Sequence number of the last packet */ -} __attribute__ ((__packed__)); +} LTTNG_PACKED; + +struct lttcomm_relayd_begin_data_pending { + uint64_t session_id; +} LTTNG_PACKED; + +struct lttcomm_relayd_end_data_pending { + uint64_t session_id; +} LTTNG_PACKED; + +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; + uint32_t live_timer; + uint8_t snapshot; + /* Contains the session_name and hostname */ + char names[]; +} 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_rotate_stream { + uint64_t stream_id; + /* Ignored for metadata streams. */ + uint64_t rotate_at_seq_num; + uint64_t new_chunk_id; + /* Includes trailing NULL. */ + uint32_t pathname_length; + /* Must be the last member of this structure. */ + char new_pathname[]; +} LTTNG_PACKED; + +struct lttcomm_relayd_rotate_rename { + uint32_t old_path_length; + uint32_t new_path_length; + /* Concatenation of the old and new paths, separated by \0. */ + char paths[]; +} LTTNG_PACKED; + +struct lttcomm_relayd_rotate_pending { + uint64_t chunk_id; +} LTTNG_PACKED; + +struct lttcomm_relayd_rotate_pending_reply { + struct lttcomm_relayd_generic_reply generic; + /* Valid values are [0, 1]. */ + uint8_t is_pending; +} LTTNG_PACKED; + +struct lttcomm_relayd_mkdir { + /* Includes trailing NULL */ + uint32_t length; + char path[]; +} LTTNG_PACKED; #endif /* _RELAYD_COMM */