Fix: lttng-ctl: erroneous uses of LTTNG_PACKED
[lttng-tools.git] / include / lttng / event.h
CommitLineData
1239a312 1/*
ab5be9fa
MJ
2 * Copyright (C) 2014 David Goulet <dgoulet@efficios.com>
3 * Copyright (C) 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
1239a312 4 *
ab5be9fa 5 * SPDX-License-Identifier: LGPL-2.1-only
1239a312 6 *
1239a312
DG
7 */
8
9#ifndef LTTNG_EVENT_H
10#define LTTNG_EVENT_H
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16#include <lttng/handle.h>
ef0e06bc 17#include <lttng/userspace-probe.h>
1239a312
DG
18
19/*
20 * Instrumentation type of tracing event.
21 */
22enum lttng_event_type {
23 LTTNG_EVENT_ALL = -1,
24 LTTNG_EVENT_TRACEPOINT = 0,
25 LTTNG_EVENT_PROBE = 1,
26 LTTNG_EVENT_FUNCTION = 2,
27 LTTNG_EVENT_FUNCTION_ENTRY = 3,
28 LTTNG_EVENT_NOOP = 4,
29 LTTNG_EVENT_SYSCALL = 5,
410b78a0 30 LTTNG_EVENT_USERSPACE_PROBE = 6,
1239a312
DG
31};
32
33/*
34 * Loglevel information.
35 */
36enum lttng_loglevel_type {
37 LTTNG_EVENT_LOGLEVEL_ALL = 0,
38 LTTNG_EVENT_LOGLEVEL_RANGE = 1,
39 LTTNG_EVENT_LOGLEVEL_SINGLE = 2,
40};
41
42/*
43 * Available loglevels.
44 */
45enum lttng_loglevel {
46 LTTNG_LOGLEVEL_EMERG = 0,
47 LTTNG_LOGLEVEL_ALERT = 1,
48 LTTNG_LOGLEVEL_CRIT = 2,
49 LTTNG_LOGLEVEL_ERR = 3,
50 LTTNG_LOGLEVEL_WARNING = 4,
51 LTTNG_LOGLEVEL_NOTICE = 5,
52 LTTNG_LOGLEVEL_INFO = 6,
53 LTTNG_LOGLEVEL_DEBUG_SYSTEM = 7,
54 LTTNG_LOGLEVEL_DEBUG_PROGRAM = 8,
55 LTTNG_LOGLEVEL_DEBUG_PROCESS = 9,
56 LTTNG_LOGLEVEL_DEBUG_MODULE = 10,
57 LTTNG_LOGLEVEL_DEBUG_UNIT = 11,
58 LTTNG_LOGLEVEL_DEBUG_FUNCTION = 12,
59 LTTNG_LOGLEVEL_DEBUG_LINE = 13,
60 LTTNG_LOGLEVEL_DEBUG = 14,
61};
62
63/*
64 * Available loglevels for the JUL domain. Those are an exact map from the
65 * class java.util.logging.Level.
66 */
67enum lttng_loglevel_jul {
68 LTTNG_LOGLEVEL_JUL_OFF = INT32_MAX,
69 LTTNG_LOGLEVEL_JUL_SEVERE = 1000,
70 LTTNG_LOGLEVEL_JUL_WARNING = 900,
71 LTTNG_LOGLEVEL_JUL_INFO = 800,
72 LTTNG_LOGLEVEL_JUL_CONFIG = 700,
73 LTTNG_LOGLEVEL_JUL_FINE = 500,
74 LTTNG_LOGLEVEL_JUL_FINER = 400,
75 LTTNG_LOGLEVEL_JUL_FINEST = 300,
76 LTTNG_LOGLEVEL_JUL_ALL = INT32_MIN,
77};
78
5cdb6027
DG
79/*
80 * Available loglevels for the LOG4j domain. Those are an exact map from the
81 * class org.apache.log4j.Level.
82 */
83enum lttng_loglevel_log4j {
84 LTTNG_LOGLEVEL_LOG4J_OFF = INT32_MAX,
85 LTTNG_LOGLEVEL_LOG4J_FATAL = 50000,
86 LTTNG_LOGLEVEL_LOG4J_ERROR = 40000,
87 LTTNG_LOGLEVEL_LOG4J_WARN = 30000,
88 LTTNG_LOGLEVEL_LOG4J_INFO = 20000,
89 LTTNG_LOGLEVEL_LOG4J_DEBUG = 10000,
90 LTTNG_LOGLEVEL_LOG4J_TRACE = 5000,
91 LTTNG_LOGLEVEL_LOG4J_ALL = INT32_MIN,
92};
93
0e115563
DG
94/*
95 * Available loglevels for the Python domain. Those are an exact map from the
96 * Level class.
97 */
98enum lttng_loglevel_python {
99 LTTNG_LOGLEVEL_PYTHON_CRITICAL = 50,
100 LTTNG_LOGLEVEL_PYTHON_ERROR = 40,
101 LTTNG_LOGLEVEL_PYTHON_WARNING = 30,
102 LTTNG_LOGLEVEL_PYTHON_INFO = 20,
103 LTTNG_LOGLEVEL_PYTHON_DEBUG = 10,
104 LTTNG_LOGLEVEL_PYTHON_NOTSET = 0,
105};
106
1239a312
DG
107/*
108 * LTTng consumer mode
109 */
110enum lttng_event_output {
111 LTTNG_EVENT_SPLICE = 0,
112 LTTNG_EVENT_MMAP = 1,
113};
114
115/* Event context possible type */
116enum lttng_event_context_type {
2001793c
JG
117 LTTNG_EVENT_CONTEXT_PID = 0,
118 LTTNG_EVENT_CONTEXT_PERF_COUNTER = 1, /* Backward compat. */
119 LTTNG_EVENT_CONTEXT_PROCNAME = 2,
120 LTTNG_EVENT_CONTEXT_PRIO = 3,
121 LTTNG_EVENT_CONTEXT_NICE = 4,
122 LTTNG_EVENT_CONTEXT_VPID = 5,
123 LTTNG_EVENT_CONTEXT_TID = 6,
124 LTTNG_EVENT_CONTEXT_VTID = 7,
125 LTTNG_EVENT_CONTEXT_PPID = 8,
126 LTTNG_EVENT_CONTEXT_VPPID = 9,
127 LTTNG_EVENT_CONTEXT_PTHREAD_ID = 10,
128 LTTNG_EVENT_CONTEXT_HOSTNAME = 11,
129 LTTNG_EVENT_CONTEXT_IP = 12,
130 LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER = 13,
1239a312 131 LTTNG_EVENT_CONTEXT_PERF_THREAD_COUNTER = 14,
2001793c 132 LTTNG_EVENT_CONTEXT_APP_CONTEXT = 15,
1ae5e83e
JD
133 LTTNG_EVENT_CONTEXT_INTERRUPTIBLE = 16,
134 LTTNG_EVENT_CONTEXT_PREEMPTIBLE = 17,
135 LTTNG_EVENT_CONTEXT_NEED_RESCHEDULE = 18,
136 LTTNG_EVENT_CONTEXT_MIGRATABLE = 19,
373148e9
FG
137 LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL = 20,
138 LTTNG_EVENT_CONTEXT_CALLSTACK_USER = 21, /* Supported on x86_32 and x86_64 only. */
40e14884
MJ
139 LTTNG_EVENT_CONTEXT_CGROUP_NS = 22,
140 LTTNG_EVENT_CONTEXT_IPC_NS = 23,
141 LTTNG_EVENT_CONTEXT_MNT_NS = 24,
142 LTTNG_EVENT_CONTEXT_NET_NS = 25,
143 LTTNG_EVENT_CONTEXT_PID_NS = 26,
144 LTTNG_EVENT_CONTEXT_USER_NS = 27,
145 LTTNG_EVENT_CONTEXT_UTS_NS = 28,
499cbfa1
MJ
146 LTTNG_EVENT_CONTEXT_UID = 29,
147 LTTNG_EVENT_CONTEXT_EUID = 30,
148 LTTNG_EVENT_CONTEXT_SUID = 31,
149 LTTNG_EVENT_CONTEXT_GID = 32,
150 LTTNG_EVENT_CONTEXT_EGID = 33,
151 LTTNG_EVENT_CONTEXT_SGID = 34,
152 LTTNG_EVENT_CONTEXT_VUID = 35,
153 LTTNG_EVENT_CONTEXT_VEUID = 36,
154 LTTNG_EVENT_CONTEXT_VSUID = 37,
155 LTTNG_EVENT_CONTEXT_VGID = 38,
156 LTTNG_EVENT_CONTEXT_VEGID = 39,
157 LTTNG_EVENT_CONTEXT_VSGID = 40,
d37ac3cd 158 LTTNG_EVENT_CONTEXT_TIME_NS = 41,
1239a312
DG
159};
160
161enum lttng_event_field_type {
162 LTTNG_EVENT_FIELD_OTHER = 0,
163 LTTNG_EVENT_FIELD_INTEGER = 1,
164 LTTNG_EVENT_FIELD_ENUM = 2,
165 LTTNG_EVENT_FIELD_FLOAT = 3,
166 LTTNG_EVENT_FIELD_STRING = 4,
167};
168
834978fd
DG
169enum lttng_event_flag {
170 LTTNG_EVENT_FLAG_SYSCALL_32 = (1U << 0),
171 LTTNG_EVENT_FLAG_SYSCALL_64 = (1U << 1),
172};
173
1239a312
DG
174/*
175 * Perf counter attributes
176 *
177 * The structures should be initialized to zero before use.
178 */
179#define LTTNG_PERF_EVENT_PADDING1 16
180struct lttng_event_perf_counter_ctx {
181 uint32_t type;
182 uint64_t config;
183 char name[LTTNG_SYMBOL_NAME_LEN];
184
185 char padding[LTTNG_PERF_EVENT_PADDING1];
186};
187
188/*
189 * Event/channel context
190 *
191 * The structures should be initialized to zero before use.
192 */
193#define LTTNG_EVENT_CONTEXT_PADDING1 16
194#define LTTNG_EVENT_CONTEXT_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32
195struct lttng_event_context {
196 enum lttng_event_context_type ctx;
197 char padding[LTTNG_EVENT_CONTEXT_PADDING1];
198
199 union {
200 struct lttng_event_perf_counter_ctx perf_counter;
2001793c
JG
201 struct {
202 char *provider_name;
203 char *ctx_name;
204 } app_ctx;
1239a312
DG
205 char padding[LTTNG_EVENT_CONTEXT_PADDING2];
206 } u;
207};
208
209/*
210 * Event probe.
211 *
212 * Either addr is used or symbol_name and offset.
213 *
214 * The structures should be initialized to zero before use.
215 */
216#define LTTNG_EVENT_PROBE_PADDING1 16
217struct lttng_event_probe_attr {
218 uint64_t addr;
219
220 uint64_t offset;
221 char symbol_name[LTTNG_SYMBOL_NAME_LEN];
222
223 char padding[LTTNG_EVENT_PROBE_PADDING1];
224};
225
226/*
227 * Function tracer
228 *
229 * The structures should be initialized to zero before use.
230 */
231#define LTTNG_EVENT_FUNCTION_PADDING1 16
232struct lttng_event_function_attr {
233 char symbol_name[LTTNG_SYMBOL_NAME_LEN];
234
235 char padding[LTTNG_EVENT_FUNCTION_PADDING1];
236};
237
238/*
239 * Generic lttng event
240 *
241 * The structures should be initialized to zero before use.
242 */
fe9ecacb 243#define LTTNG_EVENT_PADDING1 12
1239a312
DG
244#define LTTNG_EVENT_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32
245struct lttng_event {
fe9ecacb 246 /* Offset 0 */
1239a312 247 enum lttng_event_type type;
fe9ecacb
PP
248
249 /* Offset 4 */
1239a312
DG
250 char name[LTTNG_SYMBOL_NAME_LEN];
251
fe9ecacb 252 /* Offset 260 */
1239a312 253 enum lttng_loglevel_type loglevel_type;
fe9ecacb
PP
254
255 /* Offset 264 */
1239a312
DG
256 int loglevel;
257
fe9ecacb 258 /* Offset 268 */
1239a312 259 int32_t enabled; /* Does not apply: -1 */
fe9ecacb
PP
260
261 /* Offset 272 */
1239a312 262 pid_t pid;
fe9ecacb
PP
263
264 /* Offset 276 */
1239a312 265 unsigned char filter; /* filter enabled ? */
fe9ecacb
PP
266
267 /* Offset 277 */
1239a312
DG
268 unsigned char exclusion; /* exclusions added ? */
269
fe9ecacb
PP
270 /* Offset 278 */
271 char padding2[2];
272
273 /* Offset 280 */
834978fd
DG
274 /* Event flag, from 2.6 and above. */
275 enum lttng_event_flag flags;
276
fe9ecacb 277 /* Offset 284 */
b4e3ceb9
PP
278 char padding[4];
279
280 /* Offset 288 */
281 union {
4829ae55 282 uint64_t padding;
b4e3ceb9
PP
283 void *ptr;
284 } extended;
1239a312 285
fe9ecacb 286 /* Offset 296 */
1239a312
DG
287 /* Per event type configuration */
288 union {
289 struct lttng_event_probe_attr probe;
290 struct lttng_event_function_attr ftrace;
291
292 char padding[LTTNG_EVENT_PADDING2];
293 } attr;
294};
295
296#define LTTNG_EVENT_FIELD_PADDING LTTNG_SYMBOL_NAME_LEN + 32
297struct lttng_event_field {
298 char field_name[LTTNG_SYMBOL_NAME_LEN];
299 enum lttng_event_field_type type;
300 char padding[LTTNG_EVENT_FIELD_PADDING];
301 struct lttng_event event;
302 int nowrite;
303};
304
305/*
306 * List the event(s) of a session channel.
307 *
308 * Both handle and channel_name CAN NOT be NULL.
309 *
310 * Return the size (number of entries) of the "lttng_event" array. Caller must
311 * free events. On error a negative LTTng error code is returned.
312 */
313extern int lttng_list_events(struct lttng_handle *handle,
314 const char *channel_name, struct lttng_event **events);
315
c8282375
JG
316/*
317 * Create an lttng_event.
318 *
319 * This creation function, introduced in LTTng 2.11, works around
320 * the fact that the layout of the 'lttng_event' is publicly exposed.
321 *
322 * It allocates a larger object which exposes the same public fields
323 * as a 'struct lttng_event', but also allows the use of the following extended
324 * attribute setters:
325 * - lttng_event_set_userspace_probe_location();
326 *
327 * Events created through this function must be destroyed using
328 * lttng_event_destroy().
329 *
330 * Returns a zeroed lttng_event on success, NULL on error.
331 */
ef0e06bc
JG
332extern struct lttng_event *lttng_event_create(void);
333
c8282375
JG
334/*
335 * Destroy an lttng_event.
336 *
337 * This destruction function, introduced in LTTng 2.11, should only
338 * be used with events created by lttng_event_create().
339 */
ef0e06bc
JG
340extern void lttng_event_destroy(struct lttng_event *event);
341
d31d3e8c 342/*
134e72ed 343 * Get the filter expression of a specific LTTng event.
d31d3e8c 344 *
134e72ed
JG
345 * If the call is successful, then the filter expression's address is put
346 * in *filter_expression. If the event has no filter expression,
347 * *filter_expression is set to NULL. The caller does NOT own
348 * *filter_expression.
d31d3e8c
PP
349 *
350 * Returns 0 on success, or a negative LTTng error code on error.
351 */
134e72ed 352extern int lttng_event_get_filter_expression(struct lttng_event *event,
d31d3e8c
PP
353 const char **filter_string);
354
f086e50e
PP
355/*
356 * Get the number of exclusion names of a specific LTTng event.
357 *
358 * Returns the number of exclusion names on success, or a negative
359 * LTTng error code on error.
360 */
361extern int lttng_event_get_exclusion_name_count(struct lttng_event *event);
362
363/*
364 * Get an LTTng event's exclusion name at a given index.
365 *
366 * If the call is successful, then the exclusion name string's address
367 * is put in *exclusion_name. The caller does NOT own *exclusion_name.
368 *
369 * Returns 0 on success, or a negative LTTng error code on error.
370 */
371extern int lttng_event_get_exclusion_name(struct lttng_event *event,
372 size_t index, const char **exclusion_name);
373
ef0e06bc
JG
374/*
375 * Get the userspace probe location of a specific LTTng event.
376 * If the call is successful, then a pointer to the probe location is returned.
377 * If the event has no probe location a NULL pointer is returned. The caller
378 * does not own the returned probe location.
379 */
87597c2c
JG
380extern const struct lttng_userspace_probe_location *
381lttng_event_get_userspace_probe_location(const struct lttng_event *event);
ef0e06bc
JG
382
383/*
384 * Set an LTTng event's userspace probe location.
c8282375 385 *
ef0e06bc
JG
386 * If the call is successful, then the probe location is set to the event. The
387 * ownership of the probe_location is given to the event.
388 *
c8282375
JG
389 * Note that the event must have been created using 'lttng_event_create()' in
390 * order for this call to succeed.
391 *
ef0e06bc
JG
392 * Returns 0 on success, or a negative LTTng error code on error.
393 */
394extern int lttng_event_set_userspace_probe_location(struct lttng_event *event,
395 struct lttng_userspace_probe_location *probe_location);
396
1239a312
DG
397/*
398 * List the available tracepoints of a specific lttng domain.
399 *
400 * The handle CAN NOT be NULL.
401 *
402 * Return the size (number of entries) of the "lttng_event" array. Caller must
403 * free events. On error a negative LTTng error code is returned.
404 */
405extern int lttng_list_tracepoints(struct lttng_handle *handle,
406 struct lttng_event **events);
407
408/*
409 * List the available tracepoints fields of a specific lttng domain.
410 *
411 * The handle CAN NOT be NULL.
412 *
413 * Return the size (number of entries) of the "lttng_event_field" array.
414 * Caller must free fields. On error a negative LTTng error code is
415 * returned.
416 */
417extern int lttng_list_tracepoint_fields(struct lttng_handle *handle,
418 struct lttng_event_field **fields);
419
834978fd
DG
420/*
421 * List the available kernel syscall.
422 *
423 * Return the size (number of entries) of the allocated "lttng_event" array.
424 * All events in will be of type syscall. Caller must free events. On error a
425 * negative LTTng error code is returned.
426 */
427extern int lttng_list_syscalls(struct lttng_event **events);
428
1239a312
DG
429/*
430 * Add context to event(s) for a specific channel (or for all).
431 *
432 * If the channel_name is NULL and they are no channel for the domain, the
433 * default channel is created (channel0). The context is then added on ALL
434 * channels since no name was specified.
435 *
436 * The event_name is ignored since adding a context to an event is not possible
437 * for now.
438 *
439 * Return 0 on success else a negative LTTng error code.
440 */
441extern int lttng_add_context(struct lttng_handle *handle,
442 struct lttng_event_context *ctx, const char *event_name,
443 const char *channel_name);
444
445/*
446 * Create or enable an event (or events) for a channel.
447 *
448 * If the event you are trying to enable does not exist, it will be created,
449 * else it is enabled. If channel_name is NULL, the default channel is used
450 * (channel0).
451 *
452 * The handle and ev params can not be NULL.
453 *
454 * Return 0 on success else a negative LTTng error code.
455 */
456extern int lttng_enable_event(struct lttng_handle *handle,
457 struct lttng_event *ev, const char *channel_name);
458
459/*
460 * Create or enable an event with a specific filter.
461 *
462 * If the event you are trying to enable does not exist, it will be created,
463 * else it is enabled.
464 * If ev is NULL, all events are enabled with that filter.
465 * If channel_name is NULL, the default channel is used (channel0) and created
466 * if not found.
467 * If filter_expression is NULL, an event without associated filter is
468 * created.
469 *
470 * Return 0 on success else a negative LTTng error code.
471 */
472extern int lttng_enable_event_with_filter(struct lttng_handle *handle,
473 struct lttng_event *event, const char *channel_name,
474 const char *filter_expression);
475
476/*
477 * Create or enable an event with a filter and/or exclusions.
478 *
479 * If the event you are trying to enable does not exist, it will be created,
480 * else it is enabled.
481 * If ev is NULL, all events are enabled with the filter and exclusion options.
482 * If channel_name is NULL, the default channel is used (channel0) and created
483 * if not found.
484 * If filter_expression is NULL, an event without associated filter is
485 * created.
486 * If exclusion count is zero, the event will be created without exclusions.
487 *
488 * Return 0 on success else a negative LTTng error code.
489 */
490extern int lttng_enable_event_with_exclusions(struct lttng_handle *handle,
491 struct lttng_event *event, const char *channel_name,
492 const char *filter_expression,
493 int exclusion_count, char **exclusion_names);
494
495/*
496 * Disable event(s) of a channel and domain.
497 *
498 * If name is NULL, all events are disabled.
499 * If channel_name is NULL, the default channel is used (channel0).
500 *
501 * Return 0 on success else a negative LTTng error code.
502 */
503extern int lttng_disable_event(struct lttng_handle *handle,
504 const char *name, const char *channel_name);
505
6e911cad
MD
506/*
507 * Disable event(s) of a channel and domain.
508 *
509 * Takes a struct lttng_event as parameter.
510 * If channel_name is NULL, the default channel is used (channel0).
511 *
512 * Currently, @filter_expression must be NULL. (disabling specific
513 * filter expressions not implemented)
514 * Currently, only LTTNG_EVENT_ALL and LTTNG_EVENT_SYSCALL event types
515 * are implemented for field @ev.
516 *
517 * Return 0 on success else a negative LTTng error code.
518 */
519int lttng_disable_event_ext(struct lttng_handle *handle,
520 struct lttng_event *ev, const char *channel_name,
521 const char *filter_expression);
522
1239a312
DG
523#ifdef __cplusplus
524}
525#endif
526
527#endif /* LTTNG_EVENT_H */
This page took 0.053346 seconds and 4 git commands to generate.