Custom upgrade: suffix lttng_ust_context_provider_{,un}register with 1
[lttng-ust.git] / src / common / ust-context-provider.h
1 /*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright (C) 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
5 *
6 * The context provider feature is part of the ABI and used by the Java jni
7 * interface. This header should be moved to the public header directory once
8 * some test code and documentation is written.
9 */
10
11 #ifndef _LTTNG_UST_CONTEXT_PROVIDER_H
12 #define _LTTNG_UST_CONTEXT_PROVIDER_H
13
14 #include <stddef.h>
15 #include <lttng/ust-config.h>
16 #include <lttng/ust-events.h>
17
18 #include "common/dynamic-type.h"
19
20 struct lttng_ust_registered_context_provider;
21 struct lttng_ust_probe_ctx;
22
23 /*
24 * Context value
25 *
26 * IMPORTANT: this structure is part of the ABI between the probe and
27 * UST. Additional selectors may be added in the future, mapping to new
28 * union fields, which means the overall size of this structure may
29 * increase. This means this structure should never be nested within a
30 * public structure interface, nor embedded in an array.
31 */
32
33 struct lttng_ust_ctx_value {
34 enum lttng_ust_dynamic_type sel; /* Type selector */
35 union {
36 int64_t s64;
37 uint64_t u64;
38 const char *str;
39 double d;
40 } u;
41 };
42
43 /*
44 * Context provider
45 *
46 * IMPORTANT: this structure is part of the ABI between the probe and
47 * UST. Fields need to be only added at the end, never reordered, never
48 * removed.
49 *
50 * The field @struct_size should be used to determine the size of the
51 * structure. It should be queried before using additional fields added
52 * at the end of the structure.
53 */
54
55 struct lttng_ust_context_provider {
56 uint32_t struct_size;
57
58 const char *name;
59 size_t (*get_size)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
60 size_t offset);
61 void (*record)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
62 struct lttng_ust_ring_buffer_ctx *ctx,
63 struct lttng_ust_channel_buffer *chan);
64 void (*get_value)(void *priv, struct lttng_ust_probe_ctx *probe_ctx,
65 struct lttng_ust_ctx_value *value);
66 void *priv;
67
68 /* End of base ABI. Fields below should be used after checking struct_size. */
69 };
70
71 /*
72 * Application context callback private data
73 *
74 * IMPORTANT: this structure is part of the ABI between the probe and
75 * UST. Fields need to be only added at the end, never reordered, never
76 * removed.
77 *
78 * The field @struct_size should be used to determine the size of the
79 * structure. It should be queried before using additional fields added
80 * at the end of the structure.
81 */
82
83 struct lttng_ust_app_context {
84 uint32_t struct_size;
85
86 struct lttng_ust_event_field *event_field;
87 char *ctx_name;
88
89 /* End of base ABI. Fields below should be used after checking struct_size. */
90 };
91
92 /* Custom upgrade 2.12 to 2.13 */
93 #ifndef LTTNG_UST_CUSTOM_UPGRADE_CONFLICTING_SYMBOLS
94 #define lttng_ust_context_provider_register lttng_ust_context_provider_register1
95 #define lttng_ust_context_provider_unregister lttng_ust_context_provider_unregister1
96 #endif
97
98 /*
99 * Returns an opaque pointer on success, which must be passed to
100 * lttng_ust_context_provider_unregister for unregistration. Returns
101 * NULL on error.
102 */
103 struct lttng_ust_registered_context_provider *lttng_ust_context_provider_register(struct lttng_ust_context_provider *provider);
104
105 void lttng_ust_context_provider_unregister(struct lttng_ust_registered_context_provider *reg_provider);
106
107 #endif /* _LTTNG_UST_CONTEXT_PROVIDER_H */
This page took 0.041141 seconds and 5 git commands to generate.