cpp-common/bt2c/fmt.hpp: use `wise_enum::string_type` in `EnableIfIsWiseEnum` definition
[babeltrace.git] / src / plugins / ctf / lttng-live / lttng-viewer-abi.hpp
1 /*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright (C) 2013 Julien Desfossez <jdesfossez@efficios.com>
5 * Copyright (C) 2013 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 * Copyright (C) 2013 David Goulet <dgoulet@efficios.com>
7 */
8
9 #ifndef LTTNG_VIEWER_ABI_H
10 #define LTTNG_VIEWER_ABI_H
11
12 #include <stdint.h>
13
14 #include "common/common.h"
15 #include "compat/limits.h" /* IWYU pragma: keep */
16 #include "cpp-common/vendor/fmt/format.h" /* IWYU pragma: keep */
17
18 #define LTTNG_VIEWER_PATH_MAX 4096
19 #define LTTNG_VIEWER_NAME_MAX 255
20 #define LTTNG_VIEWER_HOST_NAME_MAX 64
21
22 /* Flags in reply to get_next_index and get_packet. */
23 enum
24 {
25 /* New metadata is required to read this packet. */
26 LTTNG_VIEWER_FLAG_NEW_METADATA = (1 << 0),
27 /* New stream got added to the trace. */
28 LTTNG_VIEWER_FLAG_NEW_STREAM = (1 << 1),
29 };
30
31 enum lttng_viewer_command
32 {
33 LTTNG_VIEWER_CONNECT = 1,
34 LTTNG_VIEWER_LIST_SESSIONS = 2,
35 LTTNG_VIEWER_ATTACH_SESSION = 3,
36 LTTNG_VIEWER_GET_NEXT_INDEX = 4,
37 LTTNG_VIEWER_GET_PACKET = 5,
38 LTTNG_VIEWER_GET_METADATA = 6,
39 LTTNG_VIEWER_GET_NEW_STREAMS = 7,
40 LTTNG_VIEWER_CREATE_SESSION = 8,
41 LTTNG_VIEWER_DETACH_SESSION = 9,
42 };
43
44 inline const char *format_as(const lttng_viewer_command cmd) noexcept
45 {
46 switch (cmd) {
47 case LTTNG_VIEWER_CONNECT:
48 return "CONNECT";
49
50 case LTTNG_VIEWER_LIST_SESSIONS:
51 return "LIST_SESSIONS";
52
53 case LTTNG_VIEWER_ATTACH_SESSION:
54 return "ATTACH_SESSION";
55
56 case LTTNG_VIEWER_GET_NEXT_INDEX:
57 return "GET_NEXT_INDEX";
58
59 case LTTNG_VIEWER_GET_PACKET:
60 return "GET_PACKET";
61
62 case LTTNG_VIEWER_GET_METADATA:
63 return "GET_METADATA";
64
65 case LTTNG_VIEWER_GET_NEW_STREAMS:
66 return "GET_NEW_STREAMS";
67
68 case LTTNG_VIEWER_CREATE_SESSION:
69 return "CREATE_SESSION";
70
71 case LTTNG_VIEWER_DETACH_SESSION:
72 return "DETACH_SESSION";
73 }
74
75 bt_common_abort();
76 }
77
78 enum lttng_viewer_attach_return_code
79 {
80 LTTNG_VIEWER_ATTACH_OK = 1, /* The attach command succeeded. */
81 LTTNG_VIEWER_ATTACH_ALREADY = 2, /* A viewer is already attached. */
82 LTTNG_VIEWER_ATTACH_UNK = 3, /* The session ID is unknown. */
83 LTTNG_VIEWER_ATTACH_NOT_LIVE = 4, /* The session is not live. */
84 LTTNG_VIEWER_ATTACH_SEEK_ERR = 5, /* Seek error. */
85 LTTNG_VIEWER_ATTACH_NO_SESSION = 6, /* No viewer session created. */
86 };
87
88 enum lttng_viewer_detach_session_return_code
89 {
90 LTTNG_VIEWER_DETACH_SESSION_OK = 1,
91 LTTNG_VIEWER_DETACH_SESSION_UNK = 2,
92 LTTNG_VIEWER_DETACH_SESSION_ERR = 3,
93 };
94
95 enum lttng_viewer_next_index_return_code
96 {
97 LTTNG_VIEWER_INDEX_OK = 1, /* Index is available. */
98 LTTNG_VIEWER_INDEX_RETRY = 2, /* Index not yet available. */
99 LTTNG_VIEWER_INDEX_HUP = 3, /* Index closed (trace destroyed). */
100 LTTNG_VIEWER_INDEX_ERR = 4, /* Unknow error. */
101 LTTNG_VIEWER_INDEX_INACTIVE = 5, /* Inactive stream beacon. */
102 LTTNG_VIEWER_INDEX_EOF = 6, /* End of index file. */
103 };
104
105 inline const char *format_as(const lttng_viewer_next_index_return_code code) noexcept
106 {
107 switch (code) {
108 case LTTNG_VIEWER_INDEX_OK:
109 return "INDEX_OK";
110
111 case LTTNG_VIEWER_INDEX_RETRY:
112 return "INDEX_RETRY";
113
114 case LTTNG_VIEWER_INDEX_HUP:
115 return "INDEX_HUP";
116
117 case LTTNG_VIEWER_INDEX_ERR:
118 return "INDEX_ERR";
119
120 case LTTNG_VIEWER_INDEX_INACTIVE:
121 return "INDEX_INACTIVE";
122
123 case LTTNG_VIEWER_INDEX_EOF:
124 return "INDEX_EOF";
125 }
126
127 bt_common_abort();
128 }
129
130 enum lttng_viewer_get_packet_return_code
131 {
132 LTTNG_VIEWER_GET_PACKET_OK = 1,
133 LTTNG_VIEWER_GET_PACKET_RETRY = 2,
134 LTTNG_VIEWER_GET_PACKET_ERR = 3,
135 LTTNG_VIEWER_GET_PACKET_EOF = 4,
136 };
137
138 inline const char *format_as(const lttng_viewer_get_packet_return_code code) noexcept
139 {
140 switch (code) {
141 case LTTNG_VIEWER_GET_PACKET_OK:
142 return "GET_PACKET_OK";
143
144 case LTTNG_VIEWER_GET_PACKET_RETRY:
145 return "GET_PACKET_RETRY";
146
147 case LTTNG_VIEWER_GET_PACKET_ERR:
148 return "GET_PACKET_ERR";
149
150 case LTTNG_VIEWER_GET_PACKET_EOF:
151 return "GET_PACKET_EOF";
152 }
153
154 bt_common_abort();
155 };
156
157 enum lttng_viewer_get_metadata_return_code
158 {
159 LTTNG_VIEWER_METADATA_OK = 1,
160 LTTNG_VIEWER_NO_NEW_METADATA = 2,
161 LTTNG_VIEWER_METADATA_ERR = 3,
162 };
163
164 enum lttng_viewer_connection_type
165 {
166 LTTNG_VIEWER_CLIENT_COMMAND = 1,
167 LTTNG_VIEWER_CLIENT_MESSAGE = 2,
168 };
169
170 enum lttng_viewer_seek
171 {
172 /* Receive the trace packets from the beginning. */
173 LTTNG_VIEWER_SEEK_BEGINNING = 1,
174 /* Receive the trace packets from now. */
175 LTTNG_VIEWER_SEEK_LAST = 2,
176 };
177
178 inline const char *format_as(const lttng_viewer_seek seek) noexcept
179 {
180 switch (seek) {
181 case LTTNG_VIEWER_SEEK_BEGINNING:
182 return "SEEK_BEGINNING";
183
184 case LTTNG_VIEWER_SEEK_LAST:
185 return "SEEK_LAST";
186 }
187
188 bt_common_abort();
189 }
190
191 enum lttng_viewer_new_streams_return_code
192 {
193 LTTNG_VIEWER_NEW_STREAMS_OK = 1, /* If new streams are being sent. */
194 LTTNG_VIEWER_NEW_STREAMS_NO_NEW = 2, /* If no new streams are available. */
195 LTTNG_VIEWER_NEW_STREAMS_ERR = 3, /* Error. */
196 LTTNG_VIEWER_NEW_STREAMS_HUP = 4, /* Session closed. */
197 };
198
199 enum lttng_viewer_create_session_return_code
200 {
201 LTTNG_VIEWER_CREATE_SESSION_OK = 1,
202 LTTNG_VIEWER_CREATE_SESSION_ERR = 2,
203 };
204
205 struct lttng_viewer_session
206 {
207 uint64_t id;
208 uint32_t live_timer;
209 uint32_t clients;
210 uint32_t streams;
211 char hostname[LTTNG_VIEWER_HOST_NAME_MAX];
212 char session_name[LTTNG_VIEWER_NAME_MAX];
213 } __attribute__((__packed__));
214
215 struct lttng_viewer_stream
216 {
217 uint64_t id;
218 uint64_t ctf_trace_id;
219 uint32_t metadata_flag;
220 char path_name[LTTNG_VIEWER_PATH_MAX];
221 char channel_name[LTTNG_VIEWER_NAME_MAX];
222 } __attribute__((__packed__));
223
224 struct lttng_viewer_cmd
225 {
226 uint64_t data_size; /* data size following this header */
227 uint32_t cmd; /* enum lttcomm_relayd_command */
228 uint32_t cmd_version; /* command version */
229 } __attribute__((__packed__));
230
231 /*
232 * LTTNG_VIEWER_CONNECT payload.
233 */
234 struct lttng_viewer_connect
235 {
236 /* session ID assigned by the relay for command connections */
237 uint64_t viewer_session_id;
238 uint32_t major;
239 uint32_t minor;
240 uint32_t type; /* enum lttng_viewer_connection_type */
241 } __attribute__((__packed__));
242
243 /*
244 * LTTNG_VIEWER_LIST_SESSIONS payload.
245 */
246 struct lttng_viewer_list_sessions
247 {
248 uint32_t sessions_count;
249 char session_list[]; /* struct lttng_viewer_session */
250 } __attribute__((__packed__));
251
252 /*
253 * LTTNG_VIEWER_ATTACH_SESSION payload.
254 */
255 struct lttng_viewer_attach_session_request
256 {
257 uint64_t session_id;
258 uint64_t offset; /* unused for now */
259 uint32_t seek; /* enum lttng_viewer_seek */
260 } __attribute__((__packed__));
261
262 struct lttng_viewer_attach_session_response
263 {
264 /* enum lttng_viewer_attach_return_code */
265 uint32_t status;
266 uint32_t streams_count;
267 /* struct lttng_viewer_stream */
268 char stream_list[];
269 } __attribute__((__packed__));
270
271 /*
272 * LTTNG_VIEWER_GET_NEXT_INDEX payload.
273 */
274 struct lttng_viewer_get_next_index
275 {
276 uint64_t stream_id;
277 } __attribute__((__packed__));
278
279 struct lttng_viewer_index
280 {
281 uint64_t offset;
282 uint64_t packet_size;
283 uint64_t content_size;
284 uint64_t timestamp_begin;
285 uint64_t timestamp_end;
286 uint64_t events_discarded;
287 uint64_t stream_id;
288 uint32_t status; /* enum lttng_viewer_next_index_return_code */
289 uint32_t flags; /* LTTNG_VIEWER_FLAG_* */
290 } __attribute__((__packed__));
291
292 /*
293 * LTTNG_VIEWER_GET_PACKET payload.
294 */
295 struct lttng_viewer_get_packet
296 {
297 uint64_t stream_id;
298 uint64_t offset;
299 uint32_t len;
300 } __attribute__((__packed__));
301
302 struct lttng_viewer_trace_packet
303 {
304 uint32_t status; /* enum lttng_viewer_get_packet_return_code */
305 uint32_t len;
306 uint32_t flags; /* LTTNG_VIEWER_FLAG_* */
307 char data[];
308 } __attribute__((__packed__));
309
310 /*
311 * LTTNG_VIEWER_GET_METADATA payload.
312 */
313 struct lttng_viewer_get_metadata
314 {
315 uint64_t stream_id;
316 } __attribute__((__packed__));
317
318 struct lttng_viewer_metadata_packet
319 {
320 uint64_t len;
321 uint32_t status; /* enum lttng_viewer_get_metadata_return_code */
322 char data[];
323 } __attribute__((__packed__));
324
325 /*
326 * LTTNG_VIEWER_GET_NEW_STREAMS payload.
327 */
328 struct lttng_viewer_new_streams_request
329 {
330 uint64_t session_id;
331 } __attribute__((__packed__));
332
333 struct lttng_viewer_new_streams_response
334 {
335 /* enum lttng_viewer_new_streams_return_code */
336 uint32_t status;
337 uint32_t streams_count;
338 /* struct lttng_viewer_stream */
339 char stream_list[];
340 } __attribute__((__packed__));
341
342 struct lttng_viewer_create_session_response
343 {
344 /* enum lttng_viewer_create_session_return_code */
345 uint32_t status;
346 } __attribute__((__packed__));
347
348 /*
349 * LTTNG_VIEWER_DETACH_SESSION payload.
350 */
351 struct lttng_viewer_detach_session_request
352 {
353 uint64_t session_id;
354 } __attribute__((__packed__));
355
356 struct lttng_viewer_detach_session_response
357 {
358 /* enum lttng_viewer_detach_session_return_code */
359 uint32_t status;
360 } __attribute__((__packed__));
361
362 #endif /* LTTNG_VIEWER_ABI_H */
This page took 0.037482 seconds and 4 git commands to generate.