summaryrefslogtreecommitdiffstats
path: root/runtime/staprun/ctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/staprun/ctl.c')
-rw-r--r--runtime/staprun/ctl.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/runtime/staprun/ctl.c b/runtime/staprun/ctl.c
new file mode 100644
index 00000000..9336631c
--- /dev/null
+++ b/runtime/staprun/ctl.c
@@ -0,0 +1,40 @@
+/* -*- linux-c -*-
+ *
+ * ctl.c - staprun control channel
+ *
+ * This file is part of systemtap, and is free software. You can
+ * redistribute it and/or modify it under the terms of the GNU General
+ * Public License (GPL); either version 2, or (at your option) any
+ * later version.
+ *
+ * Copyright (C) 2007 Red Hat Inc.
+ */
+
+#include "staprun.h"
+
+int init_ctl_channel(void)
+{
+ char buf[128];
+ struct statfs st;
+
+ if (statfs("/sys/kernel/debug", &st) == 0 && (int) st.f_type == (int) DEBUGFS_MAGIC)
+ sprintf (buf, "/sys/kernel/debug/systemtap_%d/cmd", getpid());
+ else
+ sprintf (buf, "/proc/systemtap_%d/cmd", getpid());
+
+ dbug("Opening %s\n", buf);
+ control_channel = open(buf, O_RDWR);
+ if (control_channel < 0) {
+ fprintf(stderr, "ERROR: couldn't open control channel %s: errcode = %s\n", buf, strerror(errno));
+ return -1;
+ }
+ return 0;
+}
+
+void close_ctl_channel(void)
+{
+ if (control_channel > 0) {
+ close(control_channel);
+ control_channel = 0;
+ }
+}