Move to kernel style SPDX license identifiers
[lttng-ust.git] / include / lttng / ust-abi.h
CommitLineData
9f3fdbc6 1/*
c0c0989a 2 * SPDX-License-Identifier: MIT
e92f3e28 3 *
c0c0989a 4 * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
a60d70e6 5 *
c0c0989a 6 * LTTng-UST ABI header
9f3fdbc6
MD
7 */
8
c0c0989a
MJ
9#ifndef _LTTNG_UST_ABI_H
10#define _LTTNG_UST_ABI_H
11
0a42beb6 12#include <stdint.h>
b3f60bbf 13#include <lttng/ust-compiler.h>
0a42beb6 14
db56acaf
MD
15#ifndef LTTNG_PACKED
16#error "LTTNG_PACKED should be defined"
17#endif
18
32ce8569
MD
19#ifndef __ust_stringify
20#define __ust_stringify1(x) #x
21#define __ust_stringify(x) __ust_stringify1(x)
22#endif /* __ust_stringify */
9f3fdbc6 23
32ce8569
MD
24#define LTTNG_UST_SYM_NAME_LEN 256
25#define LTTNG_UST_ABI_PROCNAME_LEN 16
26
27/* UST comm magic number, used to validate protocol and endianness. */
28#define LTTNG_UST_COMM_MAGIC 0xC57C57C5
b35d179d 29
0f4eaec3 30/* Version for ABI between liblttng-ust, sessiond, consumerd */
6a359b8a
MD
31#define LTTNG_UST_ABI_MAJOR_VERSION 9
32#define LTTNG_UST_ABI_MAJOR_VERSION_OLDEST_COMPATIBLE 8
33#define LTTNG_UST_ABI_MINOR_VERSION 0
0f4eaec3 34
9f3fdbc6 35enum lttng_ust_instrumentation {
df854e41
MD
36 LTTNG_UST_TRACEPOINT = 0,
37 LTTNG_UST_PROBE = 1,
38 LTTNG_UST_FUNCTION = 2,
6b0e60f1
MD
39};
40
41enum lttng_ust_loglevel_type {
882a56d7
MD
42 LTTNG_UST_LOGLEVEL_ALL = 0,
43 LTTNG_UST_LOGLEVEL_RANGE = 1,
44 LTTNG_UST_LOGLEVEL_SINGLE = 2,
9f3fdbc6
MD
45};
46
9f3fdbc6 47enum lttng_ust_output {
b35d179d 48 LTTNG_UST_MMAP = 0,
9f3fdbc6
MD
49};
50
74d81a6c
MD
51enum lttng_ust_chan_type {
52 LTTNG_UST_CHAN_PER_CPU = 0,
53 LTTNG_UST_CHAN_METADATA = 1,
54};
55
b35d179d 56struct lttng_ust_tracer_version {
b728d87e
MD
57 uint32_t major;
58 uint32_t minor;
b35d179d 59 uint32_t patchlevel;
b3f60bbf 60} LTTNG_PACKED;
9f3fdbc6 61
74d81a6c
MD
62#define LTTNG_UST_CHANNEL_PADDING (LTTNG_UST_SYM_NAME_LEN + 32)
63/*
64 * Given that the consumerd is limited to 64k file descriptors, we
65 * cannot expect much more than 1MB channel structure size. This size is
66 * depends on the number of streams within a channel, which depends on
67 * the number of possible CPUs on the system.
68 */
69#define LTTNG_UST_CHANNEL_DATA_MAX_LEN 1048576U
9f3fdbc6 70struct lttng_ust_channel {
74d81a6c
MD
71 uint64_t len;
72 enum lttng_ust_chan_type type;
1332bb04 73 char padding[LTTNG_UST_CHANNEL_PADDING];
74d81a6c 74 char data[]; /* variable sized data */
b3f60bbf 75} LTTNG_PACKED;
9f3fdbc6 76
74d81a6c 77#define LTTNG_UST_STREAM_PADDING1 (LTTNG_UST_SYM_NAME_LEN + 32)
381c0f1e 78struct lttng_ust_stream {
74d81a6c
MD
79 uint64_t len; /* shm len */
80 uint32_t stream_nr; /* stream number */
1332bb04 81 char padding[LTTNG_UST_STREAM_PADDING1];
74d81a6c
MD
82 /*
83 * shm_fd and wakeup_fd are send over unix socket as file
84 * descriptors after this structure.
85 */
b3f60bbf 86} LTTNG_PACKED;
381c0f1e 87
ebabbf58
MD
88
89enum lttng_ust_counter_arithmetic {
4b2c9b6b
MD
90 LTTNG_UST_COUNTER_ARITHMETIC_MODULAR = 0,
91 LTTNG_UST_COUNTER_ARITHMETIC_SATURATION = 1,
ebabbf58
MD
92};
93
94enum lttng_ust_counter_bitness {
5f57042e
MD
95 LTTNG_UST_COUNTER_BITNESS_32 = 0,
96 LTTNG_UST_COUNTER_BITNESS_64 = 1,
ebabbf58
MD
97};
98
99struct lttng_ust_counter_dimension {
100 uint64_t size;
101 uint64_t underflow_index;
102 uint64_t overflow_index;
103 uint8_t has_underflow;
104 uint8_t has_overflow;
105} LTTNG_PACKED;
106
107#define LTTNG_UST_COUNTER_DIMENSION_MAX 8
108struct lttng_ust_counter_conf {
109 uint32_t arithmetic; /* enum lttng_ust_counter_arithmetic */
110 uint32_t bitness; /* enum lttng_ust_counter_bitness */
111 uint32_t number_dimensions;
112 int64_t global_sum_step;
113 struct lttng_ust_counter_dimension dimensions[LTTNG_UST_COUNTER_DIMENSION_MAX];
114} LTTNG_PACKED;
115
116struct lttng_ust_counter_value {
117 uint32_t number_dimensions;
118 uint64_t dimension_indexes[LTTNG_UST_COUNTER_DIMENSION_MAX];
119 int64_t value;
120} LTTNG_PACKED;
121
8968a99f 122#define LTTNG_UST_EVENT_PADDING1 8
74d81a6c 123#define LTTNG_UST_EVENT_PADDING2 (LTTNG_UST_SYM_NAME_LEN + 32)
9f3fdbc6 124struct lttng_ust_event {
9f3fdbc6 125 enum lttng_ust_instrumentation instrumentation;
6b0e60f1
MD
126 char name[LTTNG_UST_SYM_NAME_LEN]; /* event name */
127
128 enum lttng_ust_loglevel_type loglevel_type;
882a56d7 129 int loglevel; /* value, -1: all */
8968a99f 130 uint64_t token; /* User-provided token */
1332bb04 131 char padding[LTTNG_UST_EVENT_PADDING1];
6b0e60f1 132
9f3fdbc6
MD
133 /* Per instrumentation type configuration */
134 union {
1332bb04 135 char padding[LTTNG_UST_EVENT_PADDING2];
9f3fdbc6 136 } u;
b3f60bbf 137} LTTNG_PACKED;
9f3fdbc6 138
1bd9425a 139#define LTTNG_UST_EVENT_NOTIFIER_PADDING 32
d8d2416d
FD
140struct lttng_ust_event_notifier {
141 struct lttng_ust_event event;
ebabbf58 142 uint64_t error_counter_index;
1bd9425a 143 char padding[LTTNG_UST_EVENT_NOTIFIER_PADDING];
d8d2416d
FD
144} LTTNG_PACKED;
145
146#define LTTNG_EVENT_NOTIFIER_NOTIFICATION_PADDING 32
147struct lttng_ust_event_notifier_notification {
148 uint64_t token;
d37ecb3f 149 uint16_t capture_buf_size;
d8d2416d
FD
150 char padding[LTTNG_EVENT_NOTIFIER_NOTIFICATION_PADDING];
151} LTTNG_PACKED;
152
ebabbf58
MD
153#define LTTNG_UST_COUNTER_PADDING1 (LTTNG_UST_SYM_NAME_LEN + 32)
154#define LTTNG_UST_COUNTER_DATA_MAX_LEN 4096U
155struct lttng_ust_counter {
156 uint64_t len;
157 char padding[LTTNG_UST_COUNTER_PADDING1];
158 char data[]; /* variable sized data */
159} LTTNG_PACKED;
160
161#define LTTNG_UST_COUNTER_GLOBAL_PADDING1 (LTTNG_UST_SYM_NAME_LEN + 32)
162struct lttng_ust_counter_global {
163 uint64_t len; /* shm len */
164 char padding[LTTNG_UST_COUNTER_GLOBAL_PADDING1];
165} LTTNG_PACKED;
166
167#define LTTNG_UST_COUNTER_CPU_PADDING1 (LTTNG_UST_SYM_NAME_LEN + 32)
168struct lttng_ust_counter_cpu {
169 uint64_t len; /* shm len */
170 uint32_t cpu_nr;
171 char padding[LTTNG_UST_COUNTER_CPU_PADDING1];
172} LTTNG_PACKED;
173
06d4f27e
MD
174enum lttng_ust_field_type {
175 LTTNG_UST_FIELD_OTHER = 0,
176 LTTNG_UST_FIELD_INTEGER = 1,
177 LTTNG_UST_FIELD_ENUM = 2,
178 LTTNG_UST_FIELD_FLOAT = 3,
179 LTTNG_UST_FIELD_STRING = 4,
180};
181
74d81a6c 182#define LTTNG_UST_FIELD_ITER_PADDING (LTTNG_UST_SYM_NAME_LEN + 28)
06d4f27e
MD
183struct lttng_ust_field_iter {
184 char event_name[LTTNG_UST_SYM_NAME_LEN];
185 char field_name[LTTNG_UST_SYM_NAME_LEN];
186 enum lttng_ust_field_type type;
187 int loglevel; /* event loglevel */
180901e6 188 int nowrite;
06d4f27e 189 char padding[LTTNG_UST_FIELD_ITER_PADDING];
b3f60bbf 190} LTTNG_PACKED;
06d4f27e 191
9f3fdbc6 192enum lttng_ust_context_type {
3b402b40 193 LTTNG_UST_CONTEXT_VTID = 0,
c1ef86f0
MD
194 LTTNG_UST_CONTEXT_VPID = 1,
195 LTTNG_UST_CONTEXT_PTHREAD_ID = 2,
4847e9bb 196 LTTNG_UST_CONTEXT_PROCNAME = 3,
96f85541 197 LTTNG_UST_CONTEXT_IP = 4,
d58d1454 198 LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER = 5,
c7ea8487 199 LTTNG_UST_CONTEXT_CPU_ID = 6,
53f0df51 200 LTTNG_UST_CONTEXT_APP_CONTEXT = 7,
735bef47
MJ
201 LTTNG_UST_CONTEXT_CGROUP_NS = 8,
202 LTTNG_UST_CONTEXT_IPC_NS = 9,
203 LTTNG_UST_CONTEXT_MNT_NS = 10,
204 LTTNG_UST_CONTEXT_NET_NS = 11,
205 LTTNG_UST_CONTEXT_PID_NS = 12,
206 LTTNG_UST_CONTEXT_USER_NS = 13,
207 LTTNG_UST_CONTEXT_UTS_NS = 14,
fca2f191
MJ
208 LTTNG_UST_CONTEXT_VUID = 15,
209 LTTNG_UST_CONTEXT_VEUID = 16,
210 LTTNG_UST_CONTEXT_VSUID = 17,
211 LTTNG_UST_CONTEXT_VGID = 18,
212 LTTNG_UST_CONTEXT_VEGID = 19,
213 LTTNG_UST_CONTEXT_VSGID = 20,
cefef7a7 214 LTTNG_UST_CONTEXT_TIME_NS = 21,
9f3fdbc6
MD
215};
216
d58d1454
MD
217struct lttng_ust_perf_counter_ctx {
218 uint32_t type;
219 uint64_t config;
220 char name[LTTNG_UST_SYM_NAME_LEN];
221} LTTNG_PACKED;
222
1332bb04 223#define LTTNG_UST_CONTEXT_PADDING1 16
74d81a6c 224#define LTTNG_UST_CONTEXT_PADDING2 (LTTNG_UST_SYM_NAME_LEN + 32)
9f3fdbc6
MD
225struct lttng_ust_context {
226 enum lttng_ust_context_type ctx;
1332bb04
MD
227 char padding[LTTNG_UST_CONTEXT_PADDING1];
228
9f3fdbc6 229 union {
d58d1454 230 struct lttng_ust_perf_counter_ctx perf_counter;
53f0df51
JG
231 struct {
232 /* Includes trailing '\0'. */
233 uint32_t provider_name_len;
234 uint32_t ctx_name_len;
235 } app_ctx;
1332bb04 236 char padding[LTTNG_UST_CONTEXT_PADDING2];
9f3fdbc6 237 } u;
b3f60bbf 238} LTTNG_PACKED;
9f3fdbc6 239
92462b01
MD
240/*
241 * Tracer channel attributes.
242 */
74d81a6c 243#define LTTNG_UST_CHANNEL_ATTR_PADDING (LTTNG_UST_SYM_NAME_LEN + 32)
92462b01 244struct lttng_ust_channel_attr {
92462b01
MD
245 uint64_t subbuf_size; /* bytes */
246 uint64_t num_subbuf; /* power of 2 */
b3f60bbf 247 int overwrite; /* 1: overwrite, 0: discard */
92462b01
MD
248 unsigned int switch_timer_interval; /* usec */
249 unsigned int read_timer_interval; /* usec */
250 enum lttng_ust_output output; /* splice, mmap */
b2c5f61a
MD
251 union {
252 struct {
253 int64_t blocking_timeout; /* Blocking timeout (usec) */
254 } s;
255 char padding[LTTNG_UST_CHANNEL_ATTR_PADDING];
256 } u;
b3f60bbf 257} LTTNG_PACKED;
92462b01 258
1332bb04 259#define LTTNG_UST_TRACEPOINT_ITER_PADDING 16
cbef6901
MD
260struct lttng_ust_tracepoint_iter {
261 char name[LTTNG_UST_SYM_NAME_LEN]; /* provider:name */
882a56d7 262 int loglevel;
1332bb04 263 char padding[LTTNG_UST_TRACEPOINT_ITER_PADDING];
b3f60bbf 264} LTTNG_PACKED;
cbef6901 265
74d81a6c
MD
266enum lttng_ust_object_type {
267 LTTNG_UST_OBJECT_TYPE_UNKNOWN = -1,
268 LTTNG_UST_OBJECT_TYPE_CHANNEL = 0,
269 LTTNG_UST_OBJECT_TYPE_STREAM = 1,
32ce8569
MD
270 LTTNG_UST_OBJECT_TYPE_EVENT = 2,
271 LTTNG_UST_OBJECT_TYPE_CONTEXT = 3,
d8d2416d
FD
272 LTTNG_UST_OBJECT_TYPE_EVENT_NOTIFIER_GROUP = 4,
273 LTTNG_UST_OBJECT_TYPE_EVENT_NOTIFIER = 5,
ebabbf58
MD
274 LTTNG_UST_OBJECT_TYPE_COUNTER = 6,
275 LTTNG_UST_OBJECT_TYPE_COUNTER_GLOBAL = 7,
276 LTTNG_UST_OBJECT_TYPE_COUNTER_CPU = 8,
74d81a6c
MD
277};
278
279#define LTTNG_UST_OBJECT_DATA_PADDING1 32
280#define LTTNG_UST_OBJECT_DATA_PADDING2 (LTTNG_UST_SYM_NAME_LEN + 32)
281
92462b01 282struct lttng_ust_object_data {
74d81a6c 283 enum lttng_ust_object_type type;
92462b01 284 int handle;
74d81a6c
MD
285 uint64_t size;
286 char padding1[LTTNG_UST_OBJECT_DATA_PADDING1];
287 union {
288 struct {
289 void *data;
290 enum lttng_ust_chan_type type;
ff0f5728 291 int wakeup_fd;
74d81a6c
MD
292 } channel;
293 struct {
294 int shm_fd;
295 int wakeup_fd;
296 uint32_t stream_nr;
297 } stream;
ebabbf58
MD
298 struct {
299 void *data;
300 } counter;
301 struct {
302 int shm_fd;
303 } counter_global;
304 struct {
305 int shm_fd;
306 uint32_t cpu_nr;
307 } counter_cpu;
74d81a6c
MD
308 char padding2[LTTNG_UST_OBJECT_DATA_PADDING2];
309 } u;
b3f60bbf 310} LTTNG_PACKED;
92462b01 311
d9a9a33b
MD
312enum lttng_ust_calibrate_type {
313 LTTNG_UST_CALIBRATE_TRACEPOINT,
314};
315
1332bb04 316#define LTTNG_UST_CALIBRATE_PADDING1 16
74d81a6c 317#define LTTNG_UST_CALIBRATE_PADDING2 (LTTNG_UST_SYM_NAME_LEN + 32)
d9a9a33b
MD
318struct lttng_ust_calibrate {
319 enum lttng_ust_calibrate_type type; /* type (input) */
1332bb04
MD
320 char padding[LTTNG_UST_CALIBRATE_PADDING1];
321
322 union {
323 char padding[LTTNG_UST_CALIBRATE_PADDING2];
324 } u;
b3f60bbf 325} LTTNG_PACKED;
d9a9a33b 326
5b4839a8 327#define FILTER_BYTECODE_MAX_LEN 65536
a5930599 328#define LTTNG_UST_FILTER_PADDING 32
2d78951a 329struct lttng_ust_filter_bytecode {
2734ca65
CB
330 uint32_t len;
331 uint32_t reloc_offset;
3f6fd224 332 uint64_t seqnum;
a5930599 333 char padding[LTTNG_UST_FILTER_PADDING];
2d78951a 334 char data[0];
b3f60bbf 335} LTTNG_PACKED;
2d78951a 336
d37ecb3f
FD
337#define CAPTURE_BYTECODE_MAX_LEN 65536
338#define LTTNG_UST_CAPTURE_PADDING 32
339struct lttng_ust_capture_bytecode {
340 uint32_t len;
341 uint32_t reloc_offset;
342 uint64_t seqnum;
343 char padding[LTTNG_UST_CAPTURE_PADDING];
344 char data[0];
345} LTTNG_PACKED;
346
86e0c24e
JI
347#define LTTNG_UST_EXCLUSION_PADDING 32
348struct lttng_ust_event_exclusion {
349 uint32_t count;
350 char padding[LTTNG_UST_EXCLUSION_PADDING];
351 char names[LTTNG_UST_SYM_NAME_LEN][0];
352} LTTNG_PACKED;
353
9f3fdbc6
MD
354#define _UST_CMD(minor) (minor)
355#define _UST_CMDR(minor, type) (minor)
356#define _UST_CMDW(minor, type) (minor)
357
46050b1a
MD
358/* Handled by object descriptor */
359#define LTTNG_UST_RELEASE _UST_CMD(0x1)
360
361/* Handled by object cmd */
362
9f3fdbc6
MD
363/* LTTng-UST commands */
364#define LTTNG_UST_SESSION _UST_CMD(0x40)
365#define LTTNG_UST_TRACER_VERSION \
366 _UST_CMDR(0x41, struct lttng_ust_tracer_version)
367#define LTTNG_UST_TRACEPOINT_LIST _UST_CMD(0x42)
368#define LTTNG_UST_WAIT_QUIESCENT _UST_CMD(0x43)
11ff9c7d 369#define LTTNG_UST_REGISTER_DONE _UST_CMD(0x44)
06d4f27e 370#define LTTNG_UST_TRACEPOINT_FIELD_LIST _UST_CMD(0x45)
d8d2416d 371#define LTTNG_UST_EVENT_NOTIFIER_GROUP_CREATE _UST_CMD(0x46)
9f3fdbc6 372
3c5d7582 373/* Session commands */
9f3fdbc6
MD
374#define LTTNG_UST_CHANNEL \
375 _UST_CMDW(0x51, struct lttng_ust_channel)
376#define LTTNG_UST_SESSION_START _UST_CMD(0x52)
377#define LTTNG_UST_SESSION_STOP _UST_CMD(0x53)
710b8ee3 378#define LTTNG_UST_SESSION_STATEDUMP _UST_CMD(0x54)
9f3fdbc6 379
3c5d7582 380/* Channel commands */
9f3fdbc6
MD
381#define LTTNG_UST_STREAM _UST_CMD(0x60)
382#define LTTNG_UST_EVENT \
383 _UST_CMDW(0x61, struct lttng_ust_event)
384
3c5d7582 385/* Event and channel commands */
9f3fdbc6
MD
386#define LTTNG_UST_CONTEXT \
387 _UST_CMDW(0x70, struct lttng_ust_context)
43d330a4 388#define LTTNG_UST_FLUSH_BUFFER \
43861eab 389 _UST_CMD(0x71)
9f3fdbc6 390
3c5d7582 391/* Event, event notifier, channel and session commands */
9f3fdbc6
MD
392#define LTTNG_UST_ENABLE _UST_CMD(0x80)
393#define LTTNG_UST_DISABLE _UST_CMD(0x81)
394
51489cad
MD
395/* Tracepoint list commands */
396#define LTTNG_UST_TRACEPOINT_LIST_GET _UST_CMD(0x90)
06d4f27e 397#define LTTNG_UST_TRACEPOINT_FIELD_LIST_GET _UST_CMD(0x91)
51489cad 398
3c5d7582 399/* Event and event notifier commands */
2d78951a 400#define LTTNG_UST_FILTER _UST_CMD(0xA0)
75582b3a 401#define LTTNG_UST_EXCLUSION _UST_CMD(0xA1)
2d78951a 402
d8d2416d
FD
403/* Event notifier group commands */
404#define LTTNG_UST_EVENT_NOTIFIER_CREATE \
405 _UST_CMDW(0xB0, struct lttng_ust_event_notifier)
3c5d7582
MD
406
407/* Event notifier commands */
408#define LTTNG_UST_CAPTURE _UST_CMD(0xB6)
d8d2416d 409
ebabbf58
MD
410/* Session and event notifier group commands */
411#define LTTNG_UST_COUNTER \
412 _UST_CMDW(0xC0, struct lttng_ust_counter)
413
414/* Counter commands */
415#define LTTNG_UST_COUNTER_GLOBAL \
416 _UST_CMDW(0xD0, struct lttng_ust_counter_global)
417#define LTTNG_UST_COUNTER_CPU \
418 _UST_CMDW(0xD1, struct lttng_ust_counter_cpu)
419
46050b1a
MD
420#define LTTNG_UST_ROOT_HANDLE 0
421
b61ce3b2 422struct lttng_ust_obj;
46050b1a 423
ef9ff354
MD
424union ust_args {
425 struct {
74d81a6c 426 void *chan_data;
ff0f5728 427 int wakeup_fd;
ef9ff354
MD
428 } channel;
429 struct {
74d81a6c
MD
430 int shm_fd;
431 int wakeup_fd;
ef9ff354 432 } stream;
40003310
MD
433 struct {
434 struct lttng_ust_field_iter entry;
435 } field_list;
8e696cfa
MD
436 struct {
437 char *ctxname;
438 } app_context;
d8d2416d
FD
439 struct {
440 int event_notifier_notif_fd;
441 } event_notifier_handle;
ebabbf58
MD
442 struct {
443 void *counter_data;
444 } counter;
445 struct {
446 int shm_fd;
447 } counter_shm;
ef9ff354
MD
448};
449
b61ce3b2 450struct lttng_ust_objd_ops {
ef9ff354 451 long (*cmd)(int objd, unsigned int cmd, unsigned long arg,
f59ed768 452 union ust_args *args, void *owner);
46050b1a
MD
453 int (*release)(int objd);
454};
455
456/* Create root handle. Always ID 0. */
457int lttng_abi_create_root_handle(void);
458
b61ce3b2 459const struct lttng_ust_objd_ops *objd_ops(int id);
1849ef7c 460int lttng_ust_objd_unref(int id, int is_owner);
46050b1a
MD
461
462void lttng_ust_abi_exit(void);
003fedf4 463void lttng_ust_events_exit(void);
f59ed768 464void lttng_ust_objd_table_owner_cleanup(void *owner);
b35d179d 465
9f3fdbc6 466#endif /* _LTTNG_UST_ABI_H */
This page took 0.056275 seconds and 4 git commands to generate.