-/* libltt
+/*
+ * liblttctl
*
- * Linux Trace Toolkit Netlink Control Library
+ * Linux Trace Toolkit Control Library
*
* Controls the ltt-control kernel module through debugfs.
*
- * Copyright 2005 -
- * Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- *
+ * Copyright (c) 2005-2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifdef HAVE_CONFIG_H
dir = opendir(tracedirname);
if (dir) {
exist = 1;
+ closedir(dir);
} else {
if (errno != ENOENT) {
fprintf(stderr, "%s: %s\n", __func__, strerror(errno));
exist = 0;
}
- closedir(dir);
-
if (!expect != !exist) {
if (exist)
{
return ret;
}
+
int lttctl_set_channel_enable(const char *name, const char *channel,
int enable)
{
ret = lttctl_sendop(ctlfname, opstr);
if (ret)
fprintf(stderr, "Set channel's subbuf size failed\n");
+ return ret;
}
+
int lttctl_set_channel_subbuf_size(const char *name, const char *channel,
unsigned subbuf_size)
{
return ret;
}
+static int __lttctl_set_channel_switch_timer(const char *name,
+ const char *channel, unsigned switch_timer)
+{
+ int ret;
+ char ctlfname[PATH_MAX];
+ char opstr[32];
+
+ sprintf(ctlfname, "%s/ltt/control/%s/channel/%s/switch_timer",
+ debugfsmntdir, name, channel);
+
+ sprintf(opstr, "%u", switch_timer);
+
+ ret = lttctl_sendop(ctlfname, opstr);
+ if (ret)
+ fprintf(stderr, "Set channel's switch timer failed\n");
+ return ret;
+}
+
+int lttctl_set_channel_switch_timer(const char *name, const char *channel,
+ unsigned switch_timer)
+{
+ int ret;
+ char **channellist;
+ int n_channel;
+
+ if (!name || !channel) {
+ fprintf(stderr, "%s: args invalid\n", __func__);
+ ret = -EINVAL;
+ goto arg_error;
+ }
+
+ ret = lttctl_check_trace(name, 1);
+ if (ret)
+ goto arg_error;
+
+ if (strcmp(channel, "all")) {
+ ret = __lttctl_set_channel_subbuf_size(name, channel,
+ switch_timer);
+ if (ret)
+ goto op_err;
+ } else {
+ /* allow set subbuf_size for metadata channel */
+ n_channel = lttctl_get_channellist(name, &channellist, 1);
+ if (n_channel < 0) {
+ fprintf(stderr, "%s: lttctl_get_channellist failed\n",
+ __func__);
+ ret = -ENOENT;
+ goto op_err;
+ }
+
+ for (; n_channel > 0; n_channel--) {
+ ret = __lttctl_set_channel_switch_timer(name,
+ channellist[n_channel - 1], switch_timer);
+ if (ret)
+ goto op_err_clean;
+ }
+ lttctl_free_channellist(channellist, n_channel);
+ }
+
+ return 0;
+
+op_err_clean:
+ lttctl_free_channellist(channellist, n_channel);
+op_err:
+arg_error:
+ return ret;
+}
+
int getdebugfsmntdir(char *mntdir)
{
char mnt_dir[PATH_MAX];