1 /* Copyright (C) 2009 Pierre-Marc Fournier
2 * Copyright (C) 2011 Ericsson AB, Nils Carlson <nils.carlson@ericsson.com>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library 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 GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26 #include "ust/ustctl.h"
29 #include "scanning_functions.h"
31 void usage(const char *process_name
)
33 fprintf(stderr
, "Usage: %s COMMAND [ARGS]...\n", process_name
);
35 "Control tracing within a process that supports UST,\n"
36 " the Userspace Tracing libary\n"
38 " -h[<cmd>], --help[=<cmd>] "
39 "help, for a command if provided\n"
41 "short list of commands\n"
42 " -e, --extended-list "
43 "extented list of commands with help\n"
45 list_cli_cmds(CLI_DESCRIPTIVE_LIST
);
48 struct option options
[] =
50 {"help", 2, NULL
, 'h'},
51 {"list", 0, NULL
, 'l'},
52 {"extended-list", 0, NULL
, 'e'},
56 int main(int argc
, char *argv
[])
58 struct cli_cmd
*cli_cmd
;
62 fprintf(stderr
, "No operation specified.\n");
67 while ((opt
= getopt_long(argc
, argv
, "+h::le",
68 options
, NULL
)) != -1) {
74 if (cli_print_help(optarg
)) {
75 fprintf(stderr
, "No such command %s\n",
82 list_cli_cmds(CLI_SIMPLE_LIST
);
86 list_cli_cmds(CLI_EXTENDED_LIST
);
89 fprintf(stderr
, "Unknown option\n");
94 cli_cmd
= find_cli_cmd(argv
[optind
]);
96 fprintf(stderr
, "No such command %s\n",
101 cli_dispatch_cmd(cli_cmd
, argc
- optind
, &argv
[optind
]);
106 static int list_trace_events(int argc
, char *argv
[])
108 struct trace_event_status
*tes
= NULL
;
111 sock
= parse_and_connect_pid(argv
[1]);
113 if (ustctl_get_tes(sock
, &tes
)) {
114 ERR("error while trying to list "
115 "trace_events for PID %s\n",
120 for (i
= 0; tes
[i
].name
; i
++) {
121 printf("{PID: %s, trace_event: %s}\n",
125 ustctl_free_tes(tes
);
130 static int set_sock_path(int argc
, char *argv
[])
134 sock
= parse_and_connect_pid(argv
[1]);
136 if (ustctl_set_sock_path(sock
, argv
[2])) {
137 ERR("error while trying to set sock path for PID %s\n", argv
[1]);
144 static int get_sock_path(int argc
, char *argv
[])
149 sock
= parse_and_connect_pid(argv
[1]);
151 if (ustctl_get_sock_path(sock
, &sock_path
)) {
152 ERR("error while trying to get sock path for PID %s\n", argv
[1]);
155 printf("The socket path is %s\n", sock_path
);
161 struct cli_cmd __cli_cmds general_cmds
[] = {
163 .name
= "list-trace-events",
164 .description
= "List trace-events for a given pid",
165 .help_text
= "list-trace-events <pid>\n"
166 "List the trace-events in a process\n",
167 .function
= list_trace_events
,
169 .desired_args_op
= CLI_EQ
,
172 .name
= "set-sock-path",
173 .description
= "Set the path to the consumer daemon socket",
174 .help_text
= "set-sock-path <pid> <sock-path>\n"
175 "Set the path to the consumer daemon socket\n",
176 .function
= set_sock_path
,
178 .desired_args_op
= CLI_EQ
,
181 .name
= "get-sock-path",
182 .description
= "Get the path to the consumer daemon socket",
183 .help_text
= "get-sock-path <pid>\n"
184 "Get the path to the consumer daemon socket\n",
185 .function
= get_sock_path
,
187 .desired_args_op
= CLI_EQ
,