Commit | Line | Data |
---|---|---|
67c5b804 | 1 | /* |
c0c0989a | 2 | * SPDX-License-Identifier: LGPL-2.1-only |
15f672f9 | 3 | * |
2137460a | 4 | * Copyright (C) 2011 EfficiOS Inc. |
c0c0989a | 5 | * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
67c5b804 MD |
6 | */ |
7 | ||
8 | /* | |
9 | * This header is meant for liblttng and libust internal use ONLY. | |
10 | * These declarations should NOT be considered stable API. | |
11 | */ | |
12 | ||
67534785 MJ |
13 | #ifndef _UST_COMMON_UST_COMM_H |
14 | #define _UST_COMMON_UST_COMM_H | |
c0c0989a | 15 | |
fb31eb73 | 16 | #include <stdint.h> |
67c5b804 | 17 | #include <limits.h> |
57773204 | 18 | #include <unistd.h> |
4318ae1b | 19 | #include <lttng/ust-abi.h> |
4b526611 | 20 | #include <lttng/ust-abi-old.h> |
7bc53e94 | 21 | #include <lttng/ust-error.h> |
b3f60bbf | 22 | #include <lttng/ust-compiler.h> |
c785c634 | 23 | #include <lttng/ust-ctl.h> |
67c5b804 | 24 | |
11ff9c7d | 25 | /* |
cf12a773 MD |
26 | * Default timeout the application waits for the sessiond to send its |
27 | * "register done" command. Can be overridden with the environment | |
69400ac4 | 28 | * variable "LTTNG_UST_REGISTER_TIMEOUT". Note that if the sessiond is not |
cf12a773 | 29 | * found, the application proceeds directly without any delay. |
11ff9c7d | 30 | */ |
156b0cf7 | 31 | #define LTTNG_UST_DEFAULT_CONSTRUCTOR_TIMEOUT_MS 3000 |
11ff9c7d | 32 | |
751d4e91 | 33 | #define LTTNG_DEFAULT_RUNDIR LTTNG_SYSTEM_RUNDIR |
32ce8569 | 34 | #define LTTNG_DEFAULT_HOME_RUNDIR ".lttng" |
7fc90dca | 35 | |
67c5b804 | 36 | /* Queue size of listen(2) */ |
32ce8569 MD |
37 | #define LTTNG_UST_COMM_MAX_LISTEN 10 |
38 | #define LTTNG_UST_COMM_REG_MSG_PADDING 64 | |
39 | ||
25cff019 | 40 | struct lttng_ust_event_field; |
daacdbfc | 41 | struct lttng_ust_ctx_field; |
891d6b55 | 42 | struct lttng_ust_enum_entry; |
c785c634 | 43 | struct lttng_integer_type; |
f69fe5fb | 44 | struct lttng_ust_session; |
32ce8569 | 45 | |
249cffb5 | 46 | struct lttng_ust_ctl_reg_msg { |
32ce8569 MD |
47 | uint32_t magic; |
48 | uint32_t major; | |
49 | uint32_t minor; | |
50 | uint32_t pid; | |
51 | uint32_t ppid; | |
52 | uint32_t uid; | |
53 | uint32_t gid; | |
54 | uint32_t bits_per_long; | |
55 | uint32_t uint8_t_alignment; | |
56 | uint32_t uint16_t_alignment; | |
57 | uint32_t uint32_t_alignment; | |
58 | uint32_t uint64_t_alignment; | |
59 | uint32_t long_alignment; | |
249cffb5 | 60 | uint32_t socket_type; /* enum lttng_ust_ctl_socket_type */ |
32ce8569 MD |
61 | char name[LTTNG_UST_ABI_PROCNAME_LEN]; /* process name */ |
62 | char padding[LTTNG_UST_COMM_REG_MSG_PADDING]; | |
9f5ade14 | 63 | } __attribute__((packed)); |
67c5b804 | 64 | |
67c5b804 | 65 | /* |
e7723462 | 66 | * Data structure for the commands sent from sessiond to UST. |
67c5b804 | 67 | */ |
32ce8569 MD |
68 | #define USTCOMM_MSG_PADDING1 32 |
69 | #define USTCOMM_MSG_PADDING2 32 | |
57773204 | 70 | struct ustcomm_ust_msg { |
1ece9766 | 71 | uint32_t handle; |
46050b1a | 72 | uint32_t cmd; |
32ce8569 | 73 | char padding[USTCOMM_MSG_PADDING1]; |
67c5b804 | 74 | union { |
fd17d7ce MD |
75 | struct lttng_ust_abi_channel channel; |
76 | struct lttng_ust_abi_stream stream; | |
77 | struct lttng_ust_abi_event event; | |
78 | struct lttng_ust_abi_context context; | |
79 | struct lttng_ust_abi_tracer_version version; | |
80 | struct lttng_ust_abi_tracepoint_iter tracepoint; | |
2d78951a | 81 | struct { |
2734ca65 CB |
82 | uint32_t data_size; /* following filter data */ |
83 | uint32_t reloc_offset; | |
3f6fd224 | 84 | uint64_t seqnum; |
9f5ade14 | 85 | } __attribute__((packed)) filter; |
75582b3a JI |
86 | struct { |
87 | uint32_t count; /* how many names follow */ | |
9f5ade14 | 88 | } __attribute__((packed)) exclusion; |
d37ecb3f FD |
89 | struct { |
90 | uint32_t data_size; /* following capture data */ | |
91 | uint32_t reloc_offset; | |
92 | uint64_t seqnum; | |
9f5ade14 | 93 | } __attribute__((packed)) capture; |
4b526611 MD |
94 | struct lttng_ust_abi_old_counter counter_old; |
95 | struct lttng_ust_abi_old_counter_global counter_global_old; | |
96 | struct lttng_ust_abi_old_counter_cpu counter_cpu_old; | |
8406222c | 97 | struct { |
428d8ee5 MD |
98 | uint32_t cmd_len; |
99 | } __attribute__((packed)) var_len_cmd; | |
32ce8569 | 100 | char padding[USTCOMM_MSG_PADDING2]; |
67c5b804 | 101 | } u; |
9f5ade14 | 102 | } __attribute__((packed)); |
67c5b804 | 103 | |
9eb62b9c MD |
104 | /* |
105 | * Data structure for the response from UST to the session daemon. | |
106 | * cmd_type is sent back in the reply for validation. | |
107 | */ | |
32ce8569 MD |
108 | #define USTCOMM_REPLY_PADDING1 32 |
109 | #define USTCOMM_REPLY_PADDING2 32 | |
57773204 | 110 | struct ustcomm_ust_reply { |
46050b1a MD |
111 | uint32_t handle; |
112 | uint32_t cmd; | |
7f2348b8 | 113 | int32_t ret_code; /* enum ustcomm_return_code */ |
1ece9766 | 114 | uint32_t ret_val; /* return value */ |
32ce8569 | 115 | char padding[USTCOMM_REPLY_PADDING1]; |
9eb62b9c | 116 | union { |
193183fb MD |
117 | struct { |
118 | uint64_t memory_map_size; | |
9f5ade14 | 119 | } __attribute__((packed)) channel; |
381c0f1e MD |
120 | struct { |
121 | uint64_t memory_map_size; | |
9f5ade14 | 122 | } __attribute__((packed)) stream; |
fd17d7ce MD |
123 | struct lttng_ust_abi_tracer_version version; |
124 | struct lttng_ust_abi_tracepoint_iter tracepoint; | |
32ce8569 | 125 | char padding[USTCOMM_REPLY_PADDING2]; |
9eb62b9c | 126 | } u; |
9f5ade14 | 127 | } __attribute__((packed)); |
9eb62b9c | 128 | |
32ce8569 MD |
129 | struct ustcomm_notify_hdr { |
130 | uint32_t notify_cmd; | |
9f5ade14 | 131 | } __attribute__((packed)); |
32ce8569 | 132 | |
b187bcd5 | 133 | #define USTCOMM_NOTIFY_EVENT_MSG_PADDING 24 |
32ce8569 MD |
134 | struct ustcomm_notify_event_msg { |
135 | uint32_t session_objd; | |
136 | uint32_t channel_objd; | |
fd17d7ce | 137 | char event_name[LTTNG_UST_ABI_SYM_NAME_LEN]; |
32ce8569 MD |
138 | int32_t loglevel; |
139 | uint32_t signature_len; | |
140 | uint32_t fields_len; | |
141 | uint32_t model_emf_uri_len; | |
b187bcd5 | 142 | uint64_t user_token; |
32ce8569 MD |
143 | char padding[USTCOMM_NOTIFY_EVENT_MSG_PADDING]; |
144 | /* followed by signature, fields, and model_emf_uri */ | |
9f5ade14 | 145 | } __attribute__((packed)); |
32ce8569 | 146 | |
24f7193c | 147 | #define USTCOMM_NOTIFY_EVENT_REPLY_PADDING 32 |
32ce8569 MD |
148 | struct ustcomm_notify_event_reply { |
149 | int32_t ret_code; /* 0: ok, negative: error code */ | |
24f7193c | 150 | uint32_t id; /* 32-bit event id. */ |
32ce8569 | 151 | char padding[USTCOMM_NOTIFY_EVENT_REPLY_PADDING]; |
9f5ade14 | 152 | } __attribute__((packed)); |
32ce8569 | 153 | |
24f7193c MD |
154 | #define USTCOMM_NOTIFY_KEY_MSG_PADDING 24 |
155 | struct ustcomm_notify_key_msg { | |
156 | uint32_t session_objd; | |
157 | uint32_t map_objd; | |
158 | uint32_t dimension; | |
159 | uint32_t key_string_len; | |
160 | uint64_t user_token; | |
161 | char padding[USTCOMM_NOTIFY_KEY_MSG_PADDING]; | |
162 | /* followed by dimension_indexes (array of @dimension uint64_t items) and key_string. */ | |
163 | } __attribute__((packed)); | |
164 | ||
165 | #define USTCOMM_NOTIFY_KEY_REPLY_PADDING 32 | |
166 | struct ustcomm_notify_key_reply { | |
167 | int32_t ret_code; /* 0: ok, negative: error code */ | |
168 | uint64_t index; /* 64-bit key index. */ | |
169 | char padding[USTCOMM_NOTIFY_KEY_REPLY_PADDING]; | |
170 | } __attribute__((packed)); | |
171 | ||
c785c634 MD |
172 | #define USTCOMM_NOTIFY_ENUM_MSG_PADDING 32 |
173 | struct ustcomm_notify_enum_msg { | |
174 | uint32_t session_objd; | |
fd17d7ce | 175 | char enum_name[LTTNG_UST_ABI_SYM_NAME_LEN]; |
c785c634 MD |
176 | uint32_t entries_len; |
177 | char padding[USTCOMM_NOTIFY_ENUM_MSG_PADDING]; | |
178 | /* followed by enum entries */ | |
9f5ade14 | 179 | } __attribute__((packed)); |
c785c634 | 180 | |
b187bcd5 | 181 | #define USTCOMM_NOTIFY_ENUM_REPLY_PADDING 32 |
c785c634 MD |
182 | struct ustcomm_notify_enum_reply { |
183 | int32_t ret_code; /* 0: ok, negative: error code */ | |
184 | uint64_t enum_id; | |
b187bcd5 | 185 | char padding[USTCOMM_NOTIFY_ENUM_REPLY_PADDING]; |
9f5ade14 | 186 | } __attribute__((packed)); |
c785c634 | 187 | |
32ce8569 MD |
188 | #define USTCOMM_NOTIFY_CHANNEL_MSG_PADDING 32 |
189 | struct ustcomm_notify_channel_msg { | |
190 | uint32_t session_objd; | |
191 | uint32_t channel_objd; | |
192 | uint32_t ctx_fields_len; | |
193 | char padding[USTCOMM_NOTIFY_CHANNEL_MSG_PADDING]; | |
194 | /* followed by context fields */ | |
9f5ade14 | 195 | } __attribute__((packed)); |
32ce8569 MD |
196 | |
197 | #define USTCOMM_NOTIFY_CHANNEL_REPLY_PADDING 32 | |
198 | struct ustcomm_notify_channel_reply { | |
199 | int32_t ret_code; /* 0: ok, negative: error code */ | |
200 | uint32_t chan_id; | |
249cffb5 | 201 | uint32_t header_type; /* enum lttng_ust_ctl_channel_header */ |
32ce8569 | 202 | char padding[USTCOMM_NOTIFY_CHANNEL_REPLY_PADDING]; |
9f5ade14 | 203 | } __attribute__((packed)); |
32ce8569 | 204 | |
40003310 MD |
205 | /* |
206 | * LTTNG_UST_TRACEPOINT_FIELD_LIST reply is followed by a | |
207 | * struct lttng_ust_field_iter field. | |
208 | */ | |
209 | ||
1d18d519 MJ |
210 | int ustcomm_create_unix_sock(const char *pathname) |
211 | __attribute__((visibility("hidden"))); | |
ddabe860 | 212 | |
8f1313b1 | 213 | int ustcomm_connect_unix_sock(const char *pathname, |
1d18d519 MJ |
214 | long timeout) |
215 | __attribute__((visibility("hidden"))); | |
ddabe860 | 216 | |
1d18d519 MJ |
217 | int ustcomm_accept_unix_sock(int sock) |
218 | __attribute__((visibility("hidden"))); | |
ddabe860 | 219 | |
1d18d519 MJ |
220 | int ustcomm_listen_unix_sock(int sock) |
221 | __attribute__((visibility("hidden"))); | |
ddabe860 | 222 | |
b2be0f7b MD |
223 | int ustcomm_shutdown_unix_sock(int sock) |
224 | __attribute__((visibility("hidden"))); | |
225 | ||
1d18d519 MJ |
226 | int ustcomm_close_unix_sock(int sock) |
227 | __attribute__((visibility("hidden"))); | |
74d81a6c | 228 | |
1d18d519 MJ |
229 | ssize_t ustcomm_recv_unix_sock(int sock, void *buf, size_t len) |
230 | __attribute__((visibility("hidden"))); | |
ddabe860 | 231 | |
1d18d519 MJ |
232 | ssize_t ustcomm_send_unix_sock(int sock, const void *buf, size_t len) |
233 | __attribute__((visibility("hidden"))); | |
ddabe860 | 234 | |
1d18d519 MJ |
235 | ssize_t ustcomm_send_fds_unix_sock(int sock, int *fds, size_t nb_fd) |
236 | __attribute__((visibility("hidden"))); | |
ddabe860 | 237 | |
1d18d519 MJ |
238 | ssize_t ustcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd) |
239 | __attribute__((visibility("hidden"))); | |
74d81a6c | 240 | |
1d18d519 MJ |
241 | const char *ustcomm_get_readable_code(int code) |
242 | __attribute__((visibility("hidden"))); | |
ddabe860 | 243 | |
1d18d519 MJ |
244 | int ustcomm_send_app_msg(int sock, struct ustcomm_ust_msg *lum) |
245 | __attribute__((visibility("hidden"))); | |
ddabe860 | 246 | |
8f1313b1 | 247 | int ustcomm_recv_app_reply(int sock, struct ustcomm_ust_reply *lur, |
1d18d519 MJ |
248 | uint32_t expected_handle, uint32_t expected_cmd) |
249 | __attribute__((visibility("hidden"))); | |
ddabe860 | 250 | |
8f1313b1 | 251 | int ustcomm_send_app_cmd(int sock, |
57773204 | 252 | struct ustcomm_ust_msg *lum, |
1d18d519 MJ |
253 | struct ustcomm_ust_reply *lur) |
254 | __attribute__((visibility("hidden"))); | |
ddabe860 | 255 | |
1d18d519 MJ |
256 | int ustcomm_recv_fd(int sock) |
257 | __attribute__((visibility("hidden"))); | |
67c5b804 | 258 | |
74d81a6c | 259 | ssize_t ustcomm_recv_channel_from_sessiond(int sock, |
1d18d519 MJ |
260 | void **chan_data, uint64_t len, int *wakeup_fd) |
261 | __attribute__((visibility("hidden"))); | |
ddabe860 | 262 | |
74d81a6c MD |
263 | int ustcomm_recv_stream_from_sessiond(int sock, |
264 | uint64_t *memory_map_size, | |
1d18d519 MJ |
265 | int *shm_fd, int *wakeup_fd) |
266 | __attribute__((visibility("hidden"))); | |
ddabe860 | 267 | |
d8d2416d | 268 | ssize_t ustcomm_recv_event_notifier_notif_fd_from_sessiond(int sock, |
1d18d519 MJ |
269 | int *event_notifier_notif_fd) |
270 | __attribute__((visibility("hidden"))); | |
74d81a6c | 271 | |
428d8ee5 MD |
272 | ssize_t ustcomm_recv_var_len_cmd_from_sessiond(int sock, |
273 | void **data, uint32_t len) | |
1d18d519 | 274 | __attribute__((visibility("hidden"))); |
ddabe860 | 275 | |
ebabbf58 | 276 | int ustcomm_recv_counter_shm_from_sessiond(int sock, |
1d18d519 MJ |
277 | int *shm_fd) |
278 | __attribute__((visibility("hidden"))); | |
ebabbf58 | 279 | |
32ce8569 MD |
280 | /* |
281 | * Returns 0 on success, negative error value on error. | |
282 | * Returns -EPIPE or -ECONNRESET if other end has hung up. | |
283 | */ | |
284 | int ustcomm_send_reg_msg(int sock, | |
249cffb5 | 285 | enum lttng_ust_ctl_socket_type type, |
32ce8569 MD |
286 | uint32_t bits_per_long, |
287 | uint32_t uint8_t_alignment, | |
288 | uint32_t uint16_t_alignment, | |
289 | uint32_t uint32_t_alignment, | |
290 | uint32_t uint64_t_alignment, | |
c117e988 JG |
291 | uint32_t long_alignment, |
292 | const char *procname) | |
1d18d519 | 293 | __attribute__((visibility("hidden"))); |
32ce8569 MD |
294 | |
295 | /* | |
296 | * Returns 0 on success, negative error value on error. | |
297 | * Returns -EPIPE or -ECONNRESET if other end has hung up. | |
298 | */ | |
299 | int ustcomm_register_event(int sock, | |
f69fe5fb | 300 | struct lttng_ust_session *session, |
32ce8569 MD |
301 | int session_objd, /* session descriptor */ |
302 | int channel_objd, /* channel descriptor */ | |
303 | const char *event_name, /* event name (input) */ | |
304 | int loglevel, | |
305 | const char *signature, /* event signature (input) */ | |
306 | size_t nr_fields, /* fields */ | |
3d33ca1d | 307 | const struct lttng_ust_event_field * const *fields, |
32ce8569 | 308 | const char *model_emf_uri, |
b187bcd5 | 309 | uint64_t user_token, |
24f7193c MD |
310 | uint32_t *id) /* (output) */ |
311 | __attribute__((visibility("hidden"))); | |
312 | ||
313 | /* | |
314 | * Returns 0 on success, negative error value on error. | |
315 | * Returns -EPIPE or -ECONNRESET if other end has hung up. | |
316 | */ | |
317 | int ustcomm_register_key(int sock, | |
318 | int session_objd, /* session descriptor */ | |
319 | int map_objd, /* map descriptor */ | |
320 | uint32_t dimension, | |
321 | const uint64_t *dimension_indexes, | |
322 | const char *key_string, /* key string (input) */ | |
323 | uint64_t user_token, | |
324 | uint64_t *index) /* (output) */ | |
1d18d519 | 325 | __attribute__((visibility("hidden"))); |
32ce8569 | 326 | |
c785c634 MD |
327 | /* |
328 | * Returns 0 on success, negative error value on error. | |
329 | * Returns -EPIPE or -ECONNRESET if other end has hung up. | |
330 | */ | |
331 | int ustcomm_register_enum(int sock, | |
332 | int session_objd, /* session descriptor */ | |
333 | const char *enum_name, /* enum name (input) */ | |
334 | size_t nr_entries, /* entries */ | |
3d33ca1d | 335 | const struct lttng_ust_enum_entry * const *entries, |
1d18d519 MJ |
336 | uint64_t *id) /* enum id (output) */ |
337 | __attribute__((visibility("hidden"))); | |
c785c634 | 338 | |
32ce8569 MD |
339 | /* |
340 | * Returns 0 on success, negative error value on error. | |
341 | * Returns -EPIPE or -ECONNRESET if other end has hung up. | |
342 | */ | |
343 | int ustcomm_register_channel(int sock, | |
f69fe5fb | 344 | struct lttng_ust_session *session, |
32ce8569 MD |
345 | int session_objd, /* session descriptor */ |
346 | int channel_objd, /* channel descriptor */ | |
347 | size_t nr_ctx_fields, | |
4e48b5d2 | 348 | struct lttng_ust_ctx_field *ctx_fields, |
32ce8569 | 349 | uint32_t *chan_id, /* channel id (output) */ |
1d18d519 MJ |
350 | int *header_type) /* header type (output) */ |
351 | __attribute__((visibility("hidden"))); | |
32ce8569 | 352 | |
1d18d519 MJ |
353 | int ustcomm_setsockopt_rcv_timeout(int sock, unsigned int msec) |
354 | __attribute__((visibility("hidden"))); | |
ddabe860 | 355 | |
1d18d519 MJ |
356 | int ustcomm_setsockopt_snd_timeout(int sock, unsigned int msec) |
357 | __attribute__((visibility("hidden"))); | |
ff517991 | 358 | |
67534785 | 359 | #endif /* _UST_COMMON_UST_COMM_H */ |