f2ec7405f83fe4ca4e35b418fba0724f2b02bf20
[lttng-tools.git] / lttng-sessiond / trace-ust.h
1 /*
2 * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; only version 2
7 * of the License.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19 #ifndef _LTT_TRACE_UST_H
20 #define _LTT_TRACE_UST_H
21
22 #include <config.h>
23 #include <limits.h>
24 #include <urcu.h>
25 #include <urcu/list.h>
26 #include <lttng/lttng.h>
27
28 #include "ust-ctl.h"
29
30 #include "../hashtable/rculfhash.h"
31
32 /* UST Stream list */
33 struct ltt_ust_stream_list {
34 unsigned int count;
35 struct cds_list_head head;
36 };
37
38 /* Context hash table nodes */
39 struct ltt_ust_context {
40 struct lttng_ust_context ctx;
41 struct cds_lfht_node node;
42 };
43
44 /* UST event */
45 struct ltt_ust_event {
46 struct lttng_ust_event attr;
47 struct cds_lfht *ctx;
48 struct cds_lfht_node node;
49 };
50
51 /* UST stream */
52 struct ltt_ust_stream {
53 int handle;
54 char pathname[PATH_MAX];
55 struct lttng_ust_object_data *obj;
56 /* Using a list of streams to keep order. */
57 struct cds_list_head list;
58 };
59
60 /* UST channel */
61 struct ltt_ust_channel {
62 char name[LTTNG_UST_SYM_NAME_LEN];
63 char pathname[PATH_MAX];
64 struct lttng_ust_channel attr;
65 struct cds_lfht *ctx;
66 struct cds_lfht *events;
67 struct cds_lfht_node node;
68 };
69
70 /* UST Metadata */
71 struct ltt_ust_metadata {
72 int handle;
73 struct lttng_ust_object_data *obj;
74 char pathname[PATH_MAX]; /* Trace file path name */
75 struct lttng_ust_channel attr;
76 struct lttng_ust_object_data *stream_obj;
77 };
78
79 /* UST domain global (LTTNG_DOMAIN_UST) */
80 struct ltt_ust_domain_global {
81 struct cds_lfht *channels;
82 };
83
84 /* UST domain pid (LTTNG_DOMAIN_UST_PID) */
85 struct ltt_ust_domain_pid {
86 pid_t pid;
87 struct cds_lfht *channels;
88 struct cds_lfht_node node;
89 };
90
91 /* UST domain exec name (LTTNG_DOMAIN_UST_EXEC_NAME) */
92 struct ltt_ust_domain_exec {
93 char exec_name[LTTNG_UST_SYM_NAME_LEN];
94 struct cds_lfht *channels;
95 struct cds_lfht_node node;
96 };
97
98 /* UST session */
99 struct ltt_ust_session {
100 int uid; /* Unique identifier of session */
101 int consumer_fds_sent;
102 int consumer_fd;
103 int start_trace;
104 char pathname[PATH_MAX];
105 struct ltt_ust_domain_global domain_global;
106 /*
107 * Those two hash tables contains data for a specific UST domain and each
108 * contains a HT of channels. See ltt_ust_domain_exec and
109 * ltt_ust_domain_pid data structures.
110 */
111 struct cds_lfht *domain_pid;
112 struct cds_lfht *domain_exec;
113 };
114
115 #ifdef HAVE_LIBLTTNG_UST_CTL
116
117 /*
118 * Lookup functions. NULL is returned if not found.
119 */
120 struct ltt_ust_event *trace_ust_find_event_by_name(struct cds_lfht *ht,
121 char *name);
122 struct ltt_ust_channel *trace_ust_find_channel_by_name(struct cds_lfht *ht,
123 char *name);
124
125 /*
126 * Create functions malloc() the data structure.
127 */
128 struct ltt_ust_session *trace_ust_create_session(char *path, unsigned int uid,
129 struct lttng_domain *domain);
130 struct ltt_ust_channel *trace_ust_create_channel(struct lttng_channel *attr,
131 char *path);
132 struct ltt_ust_event *trace_ust_create_event(struct lttng_event *ev);
133 struct ltt_ust_metadata *trace_ust_create_metadata(char *path);
134
135 /*
136 * Destroy functions free() the data structure and remove from linked list if
137 * it's applies.
138 */
139 void trace_ust_destroy_session(struct ltt_ust_session *session);
140 void trace_ust_destroy_metadata(struct ltt_ust_metadata *metadata);
141 void trace_ust_destroy_channel(struct ltt_ust_channel *channel);
142 void trace_ust_destroy_event(struct ltt_ust_event *event);
143
144 #else /* HAVE_LIBLTTNG_UST_CTL */
145
146 static inline
147 struct ltt_ust_event *trace_ust_find_event_by_name(struct cds_lfht *ht,
148 char *name)
149 {
150 return NULL;
151 }
152
153 static inline
154 struct ltt_ust_channel *trace_ust_find_channel_by_name(struct cds_lfht *ht,
155 char *name)
156 {
157 return NULL;
158 }
159
160 static inline
161 struct ltt_ust_session *trace_ust_create_session(char *path, pid_t pid,
162 struct lttng_domain *domain)
163 {
164 return NULL;
165 }
166 static inline
167 struct ltt_ust_channel *trace_ust_create_channel(struct lttng_channel *attr,
168 char *path)
169 {
170 return NULL;
171 }
172 static inline
173 struct ltt_ust_event *trace_ust_create_event(struct lttng_event *ev)
174 {
175 return NULL;
176 }
177 static inline
178 struct ltt_ust_metadata *trace_ust_create_metadata(char *path)
179 {
180 return NULL;
181 }
182
183 static inline
184 void trace_ust_destroy_session(struct ltt_ust_session *session)
185 {
186 }
187
188 static inline
189 void trace_ust_destroy_metadata(struct ltt_ust_metadata *metadata)
190 {
191 }
192
193 static inline
194 void trace_ust_destroy_channel(struct ltt_ust_channel *channel)
195 {
196 }
197
198 static inline
199 void trace_ust_destroy_event(struct ltt_ust_event *event)
200 {
201 }
202
203 #endif /* HAVE_LIBLTTNG_UST_CTL */
204
205 #endif /* _LTT_TRACE_UST_H */
This page took 0.03201 seconds and 3 git commands to generate.