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