Add trace name handling throughout tracectl, ustcomm and ustcmd
[ust.git] / libustcomm / ustcomm.h
CommitLineData
c39c72ee
PMF
1/* Copyright (C) 2009 Pierre-Marc Fournier
2 *
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 2.1 of the License, or (at your option) any later version.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17
f9e5ce61
PMF
18#ifndef USTCOMM_H
19#define USTCOMM_H
20
21#include <sys/types.h>
b02e31e5 22#include <sys/un.h>
22d9080d 23#include <urcu/list.h>
f9e5ce61 24
17bb07b4 25#include <ust/kcompat/kcompat.h>
aca1ad90 26
397d8454 27#define SOCK_DIR "/tmp/ust-app-socks"
ab33e65c 28
4723ca09 29struct ustcomm_sock {
aca1ad90
PMF
30 struct list_head list;
31 int fd;
4723ca09 32 int epoll_fd;
aca1ad90
PMF
33};
34
4723ca09 35struct ustcomm_header {
4723ca09 36 int command;
72098143
NC
37 long size;
38 int result;
4723ca09 39 int fd_included;
811e4b93 40};
aca1ad90 41
72098143
NC
42#define USTCOMM_BUFFER_SIZE ((1 << 12) - sizeof(struct ustcomm_header))
43
44/* Specify a sata size that leaves margin at the end of a buffer
45 * in order to make sure that we never have more data than
46 * will fit in the buffer AND that the last chars (due to a
47 * pre-receive memset) will always be 0, terminating any string
48 */
49#define USTCOMM_DATA_SIZE (USTCOMM_BUFFER_SIZE - 20 * sizeof(void *))
50
51enum tracectl_commands {
52 ALLOC_TRACE,
53 CONSUME_BUFFER,
54 CREATE_TRACE,
55 DESTROY_TRACE,
56 DISABLE_MARKER,
57 ENABLE_MARKER,
58 EXIT,
59 FORCE_SUBBUF_SWITCH,
60 GET_BUF_SHMID_PIPE_FD,
61 GET_PIDUNIQUE,
62 GET_SOCK_PATH,
63 GET_SUBBUFFER,
64 GET_SUBBUF_NUM_SIZE,
65 LIST_MARKERS,
66 LIST_TRACE_EVENTS,
67 LOAD_PROBE_LIB,
68 NOTIFY_BUF_MAPPED,
69 PRINT_MARKERS,
70 PRINT_TRACE_EVENTS,
71 PUT_SUBBUFFER,
72 SETUP_TRACE,
73 SET_SOCK_PATH,
74 SET_SUBBUF_NUM,
75 SET_SUBBUF_SIZE,
76 START,
77 START_TRACE,
78 STOP_TRACE,
79};
80
10f2b724
NC
81struct ustcomm_trace_info {
82 char *trace;
83 char data[USTCOMM_DATA_SIZE];
84};
85
72098143 86struct ustcomm_channel_info {
d89b8191 87 char *trace;
72098143
NC
88 char *channel;
89 unsigned int subbuf_size;
90 unsigned int subbuf_num;
91 char data[USTCOMM_DATA_SIZE];
92};
93
94struct ustcomm_buffer_info {
d89b8191 95 char *trace;
72098143
NC
96 char *channel;
97 int ch_cpu;
98 pid_t pid;
99 int buf_shmid;
100 int buf_struct_shmid;
101 long consumed_old;
102 char data[USTCOMM_DATA_SIZE];
103};
104
105struct ustcomm_marker_info {
d89b8191 106 char *trace;
72098143
NC
107 char *channel;
108 char *marker;
109 char data[USTCOMM_DATA_SIZE];
110};
111
112struct ustcomm_sock_path {
113 char *sock_path;
114 char data[USTCOMM_DATA_SIZE];
115};
116
117struct ustcomm_pidunique {
118 s64 pidunique;
119};
d0b5f2b9 120
72098143
NC
121struct ustcomm_notify_buf_mapped {
122 char data[USTCOMM_DATA_SIZE];
123};
b02e31e5 124
4723ca09
NC
125/* Ensure directory existence, usefull for unix sockets */
126extern int ensure_dir_exists(const char *dir);
0e4b45ac 127
4723ca09
NC
128/* Create and delete sockets */
129extern struct ustcomm_sock * ustcomm_init_sock(int fd, int epoll_fd,
130 struct list_head *list);
131extern void ustcomm_del_sock(struct ustcomm_sock *sock, int keep_in_epoll);
d0b5f2b9 132
4723ca09
NC
133/* Create and delete named sockets */
134extern struct ustcomm_sock * ustcomm_init_named_socket(const char *name,
135 int epoll_fd);
136extern void ustcomm_del_named_sock(struct ustcomm_sock *sock,
137 int keep_socket_file);
3847c3ba 138
4723ca09
NC
139/* Send and receive functions for file descriptors */
140extern int ustcomm_send_fd(int sock, const struct ustcomm_header *header,
141 const char *data, int *fd);
142extern int ustcomm_recv_fd(int sock, struct ustcomm_header *header,
72098143 143 char *data, int *fd);
d0b5f2b9 144
4723ca09
NC
145/* Normal send and receive functions */
146extern int ustcomm_send(int sock, const struct ustcomm_header *header,
147 const char *data);
148extern int ustcomm_recv(int sock, struct ustcomm_header *header,
72098143 149 char *data);
f9e5ce61 150
72098143
NC
151/* Receive and allocate data, not to be used inside libust */
152extern int ustcomm_recv_alloc(int sock,
153 struct ustcomm_header *header,
154 char **data);
155
156/* Request function, send and receive */
157extern int ustcomm_req(int sock,
158 const struct ustcomm_header *req_header,
159 const char *req_data,
160 struct ustcomm_header *res_header,
161 char *res_data);
3bb56863 162
4723ca09
NC
163extern int ustcomm_request_consumer(pid_t pid, const char *channel);
164extern int ustcomm_connect_app(pid_t pid, int *app_fd);
165extern int ustcomm_connect_path(const char *path, int *connection_fd);
72098143 166
7e92827d 167extern int nth_token_is(const char *str, const char *token, int tok_no);
b02e31e5 168
7e92827d 169extern char *nth_token(const char *str, int tok_no);
b02e31e5 170
72098143
NC
171/* String serialising functions, printf straight into a buffer */
172#define USTCOMM_POISON_PTR (void *)0x19831018
173
174extern char * ustcomm_print_data(char *data_field, int field_size,
175 int *offset, const char *format, ...);
176extern char * ustcomm_restore_ptr(char *ptr, char *data_field,
177 int data_field_size);
178
179#define COMPUTE_MSG_SIZE(struct_ptr, offset) \
180 (size_t) (long)(struct_ptr)->data - (long)(struct_ptr) + (offset)
181
182/* Packing and unpacking functions, making life easier */
10f2b724
NC
183extern int ustcomm_pack_trace_info(struct ustcomm_header *header,
184 struct ustcomm_trace_info *trace_inf,
185 const char *trace);
186
187extern int ustcomm_unpack_trace_info(struct ustcomm_trace_info *trace_inf);
188
72098143
NC
189extern int ustcomm_pack_channel_info(struct ustcomm_header *header,
190 struct ustcomm_channel_info *ch_inf,
d89b8191 191 const char *trace,
72098143
NC
192 const char *channel);
193
194extern int ustcomm_unpack_channel_info(struct ustcomm_channel_info *ch_inf);
195
196extern int ustcomm_pack_buffer_info(struct ustcomm_header *header,
197 struct ustcomm_buffer_info *buf_inf,
d89b8191 198 const char *trace,
72098143
NC
199 const char *channel,
200 int channel_cpu);
201
202extern int ustcomm_unpack_buffer_info(struct ustcomm_buffer_info *buf_inf);
203
204extern int ustcomm_pack_marker_info(struct ustcomm_header *header,
205 struct ustcomm_marker_info *marker_inf,
d89b8191 206 const char *trace,
72098143
NC
207 const char *channel,
208 const char *marker);
209
210extern int ustcomm_unpack_marker_info(struct ustcomm_marker_info *marker_inf);
211
212
213extern int ustcomm_pack_sock_path(struct ustcomm_header *header,
214 struct ustcomm_sock_path *sock_path_inf,
215 const char *socket_path);
216
217extern int ustcomm_unpack_sock_path(struct ustcomm_sock_path *sock_path_inf);
218
f9e5ce61 219#endif /* USTCOMM_H */
This page took 0.039322 seconds and 4 git commands to generate.