2 * SPDX-License-Identifier: LGPL-2.1-only
4 * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 #include "ust-events-internal.h"
13 #include <usterr-signal-safe.h>
14 #include "lttng-tracer-core.h"
17 static CDS_LIST_HEAD(lttng_transport_list
);
18 static CDS_LIST_HEAD(lttng_counter_transport_list
);
20 struct lttng_transport
*lttng_ust_transport_find(const char *name
)
22 struct lttng_transport
*transport
;
24 cds_list_for_each_entry(transport
, <tng_transport_list
, node
) {
25 if (!strcmp(transport
->name
, name
))
31 struct lttng_counter_transport
*lttng_counter_transport_find(const char *name
)
33 struct lttng_counter_transport
*transport
;
35 cds_list_for_each_entry(transport
, <tng_counter_transport_list
, node
) {
36 if (!strcmp(transport
->name
, name
))
43 * lttng_transport_register - LTT transport registration
44 * @transport: transport structure
46 * Registers a transport which can be used as output to extract the data out of
47 * LTTng. Called with ust_lock held.
49 void lttng_transport_register(struct lttng_transport
*transport
)
51 cds_list_add_tail(&transport
->node
, <tng_transport_list
);
55 * lttng_transport_unregister - LTT transport unregistration
56 * @transport: transport structure
57 * Called with ust_lock held.
59 void lttng_transport_unregister(struct lttng_transport
*transport
)
61 cds_list_del(&transport
->node
);
65 * lttng_counter_transport_register - LTTng counter transport registration
66 * @transport: transport structure
68 * Registers a counter transport which can be used as output to extract
69 * the data out of LTTng. Called with ust_lock held.
71 void lttng_counter_transport_register(struct lttng_counter_transport
*transport
)
73 cds_list_add_tail(&transport
->node
, <tng_counter_transport_list
);
77 * lttng_counter_transport_unregister - LTTng counter transport unregistration
78 * @transport: transport structure
79 * Called with ust_lock held.
81 void lttng_counter_transport_unregister(struct lttng_counter_transport
*transport
)
83 cds_list_del(&transport
->node
);
87 * Needed by comm layer.
89 struct lttng_enum
*lttng_ust_enum_get_from_desc(struct lttng_session
*session
,
90 const struct lttng_ust_enum_desc
*enum_desc
)
92 struct lttng_enum
*_enum
;
93 struct cds_hlist_head
*head
;
94 struct cds_hlist_node
*node
;
95 size_t name_len
= strlen(enum_desc
->name
);
98 hash
= jhash(enum_desc
->name
, name_len
, 0);
99 head
= &session
->priv
->enums_ht
.table
[hash
& (LTTNG_UST_ENUM_HT_SIZE
- 1)];
100 cds_hlist_for_each_entry(_enum
, node
, head
, hlist
) {
102 if (_enum
->desc
== enum_desc
)
108 size_t lttng_ust_dummy_get_size(struct lttng_ust_ctx_field
*field
, size_t offset
)
112 size
+= lib_ring_buffer_align(offset
, lttng_alignof(char));
113 size
+= sizeof(char); /* tag */
117 void lttng_ust_dummy_record(struct lttng_ust_ctx_field
*field
,
118 struct lttng_ust_lib_ring_buffer_ctx
*ctx
,
119 struct lttng_channel
*chan
)
121 char sel_char
= (char) LTTNG_UST_DYNAMIC_TYPE_NONE
;
123 lib_ring_buffer_align_ctx(ctx
, lttng_alignof(sel_char
));
124 chan
->ops
->event_write(ctx
, &sel_char
, sizeof(sel_char
));
127 void lttng_ust_dummy_get_value(struct lttng_ust_ctx_field
*field
,
128 struct lttng_ust_ctx_value
*value
)
130 value
->sel
= LTTNG_UST_DYNAMIC_TYPE_NONE
;
133 int lttng_context_is_app(const char *name
)
135 if (strncmp(name
, "$app.", strlen("$app.")) != 0) {