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