Rename sessiond comm lib into ust comm
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 22 Aug 2011 19:35:10 +0000 (15:35 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 22 Aug 2011 19:35:10 +0000 (15:35 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
13 files changed:
Makefile.am
configure.ac
include/Makefile.am
include/lttng-sessiond-comm.h [deleted file]
include/lttng-ust-comm.h [new file with mode: 0644]
include/ust/lttng-ust-abi.h
liblttng-sessiond-comm/Makefile.am [deleted file]
liblttng-sessiond-comm/lttng-sessiond-comm.c [deleted file]
liblttng-ust-comm/Makefile.am [new file with mode: 0644]
liblttng-ust-comm/lttng-ust-comm.c [new file with mode: 0644]
libust/Makefile.am
libust/lttng-ust-abi.c
libust/lttng-ust-comm.c

index b163bf8996c6655be22bc442a00f53a3ae8ab50d..4f5ae8c1876cbfa2ac9f05d7cb0dc7c755c8a2c6 100644 (file)
@@ -5,7 +5,7 @@ ACLOCAL_AMFLAGS = -I config
 # libust and '.' (that contains the linker script). However, '.'
 # must be installed after libust so it can overwrite libust.so with
 # the linker script.
-SUBDIRS = snprintf liblttng-sessiond-comm libringbuffer libust include doc tests
+SUBDIRS = snprintf liblttng-ust-comm libringbuffer libust include doc tests
 
 #temporarily disabled
 # . libustinstr-malloc libustfork
index 9926d7329320dfd3d67c71550e21b6a15168e44a..ce24a1a24a67c03d2d6439887955e908883430bf 100644 (file)
@@ -141,7 +141,7 @@ AC_CONFIG_FILES([
        doc/man/Makefile
        doc/info/Makefile
        include/Makefile
-       liblttng-sessiond-comm/Makefile
+       liblttng-ust-comm/Makefile
        libringbuffer/Makefile
        libust/Makefile
        tests/Makefile
index 3361b4e1b3fbee382979e736382b87b0aa55030b..a754d04b98b43ce22d0d8ebeabd95be93ff98973 100644 (file)
@@ -16,7 +16,7 @@ nobase_include_HEADERS = \
 # note: usterr-signal-safe.h, core.h and share.h need namespace cleanup.
 
 noinst_HEADERS = \
-       lttng-sessiond-comm.h \
+       lttng-ust-comm.h \
        usterr.h \
        ust_snprintf.h \
        ust/compat.h \
diff --git a/include/lttng-sessiond-comm.h b/include/lttng-sessiond-comm.h
deleted file mode 100644 (file)
index 71a1dd6..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-#ifndef _LTTNG_SESSIOND_COMM_H
-#define _LTTNG_SESSIOND_COMM_H
-
-/*
- * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
- *                      Julien Desfossez <julien.desfossez@polymtl.ca>
- *                      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; only version 2
- * of the License.
- * 
- * This program 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.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-/*
- * This header is meant for liblttng and libust internal use ONLY.
- * These declarations should NOT be considered stable API.
- */
-
-#include <limits.h>
-#include <lttng/lttng.h>
-
-#define LTTNG_RUNDIR                        "/var/run/lttng"
-
-/* Default unix socket path */
-#define DEFAULT_GLOBAL_CLIENT_UNIX_SOCK     LTTNG_RUNDIR "/client-ltt-sessiond"
-#define DEFAULT_GLOBAL_APPS_UNIX_SOCK       LTTNG_RUNDIR "/apps-ltt-sessiond"
-#define DEFAULT_HOME_APPS_UNIX_SOCK         "%s/.apps-ltt-sessiond"
-#define DEFAULT_HOME_CLIENT_UNIX_SOCK       "%s/.client-ltt-sessiond"
-
-/* Queue size of listen(2) */
-#define MAX_LISTEN 10
-
-#define LTTNG_UST_COMM_VERSION_MAJOR           0
-#define LTTNG_UST_COMM_VERSION_MINOR           1
-
-/* Get the error code index from 0 since
- * LTTCOMM_OK start at 1000
- */
-#define LTTCOMM_ERR_INDEX(code) (code - LTTCOMM_OK)
-
-enum lttcomm_ust_command {
-       LTTNG_UST_CREATE_SESSION,
-       LTTNG_UST_RELEASE_SESSION,
-       LTTNG_UST_VERSION,
-       LTTNG_UST_LIST_TRACEPOINTS,
-       LTTNG_UST_WAIT_QUIESCENT,
-       LTTNG_UST_CALIBRATE,
-
-       /* Apply on session handle */
-       LTTNG_UST_METADATA,     /* release with LTTNG_UST_RELEASE_CHANNEL */
-       LTTNG_UST_CHANNEL,
-       LTTNG_UST_RELEASE_CHANNEL,
-       LTTNG_UST_SESSION_START,
-       LTTNG_UST_SESSION_STOP,
-
-       /* Apply on channel handle */
-       LTTNG_UST_STREAM,
-       LTTNG_UST_RELEASE_STREAM,
-       LTTNG_UST_EVENT,
-       LTTNG_UST_RELEASE_EVENT,
-
-       /* Apply on event and channel handle */
-       LTTNG_UST_CONTEXT,
-       LTTNG_UST_RELEASE_CONTEXT,
-
-       /* Apply on event, channel and session handle */
-       LTTNG_UST_ENABLE,
-       LTTNG_UST_DISABLE,
-};
-
-/*
- * lttcomm error code.
- */
-enum lttcomm_return_code {
-       LTTCOMM_OK = 1000,                              /* Ok */
-       LTTCOMM_ERR,                                    /* Unknown Error */
-       LTTCOMM_UND,                                    /* Undefine command */
-       LTTCOMM_NOT_IMPLEMENTED,        /* Command not implemented */
-       LTTCOMM_UNKNOWN_DOMAIN,         /* Tracing domain not known */
-       LTTCOMM_ALLOC_FAIL,                             /* Trace allocation fail */
-       LTTCOMM_NO_SESSION,                             /* No session found */
-       LTTCOMM_CREATE_FAIL,                    /* Create trace fail */
-       LTTCOMM_SESSION_FAIL,                   /* Create session fail */
-       LTTCOMM_START_FAIL,                             /* Start tracing fail */
-       LTTCOMM_STOP_FAIL,                              /* Stop tracing fail */
-       LTTCOMM_LIST_FAIL,                              /* Listing apps fail */
-       LTTCOMM_NO_APPS,                                /* No traceable application */
-       LTTCOMM_SESS_NOT_FOUND,                 /* Session name not found */
-       LTTCOMM_NO_TRACE,                               /* No trace exist */
-       LTTCOMM_FATAL,                                  /* Session daemon had a fatal error */
-       LTTCOMM_NO_TRACEABLE,                   /* Error for non traceable app */
-       LTTCOMM_SELECT_SESS,                    /* Must select a session */
-       LTTCOMM_EXIST_SESS,                             /* Session name already exist */
-       LTTCOMM_NO_EVENT,                               /* No event found */
-       LTTCOMM_KERN_NA,                                /* Kernel tracer unavalable */
-       LTTCOMM_KERN_EVENT_EXIST,       /* Kernel event already exists */
-       LTTCOMM_KERN_SESS_FAIL,                 /* Kernel create session failed */
-       LTTCOMM_KERN_CHAN_FAIL,                 /* Kernel create channel failed */
-       LTTCOMM_KERN_CHAN_NOT_FOUND,    /* Kernel channel not found */
-       LTTCOMM_KERN_CHAN_DISABLE_FAIL, /* Kernel disable channel failed */
-       LTTCOMM_KERN_CHAN_ENABLE_FAIL,  /* Kernel enable channel failed */
-       LTTCOMM_KERN_CONTEXT_FAIL,      /* Kernel add context failed */
-       LTTCOMM_KERN_ENABLE_FAIL,               /* Kernel enable event failed */
-       LTTCOMM_KERN_DISABLE_FAIL,              /* Kernel disable event failed */
-       LTTCOMM_KERN_META_FAIL,                 /* Kernel open metadata failed */
-       LTTCOMM_KERN_START_FAIL,                /* Kernel start trace failed */
-       LTTCOMM_KERN_STOP_FAIL,                 /* Kernel stop trace failed */
-       LTTCOMM_KERN_CONSUMER_FAIL,             /* Kernel consumer start failed */
-       LTTCOMM_KERN_STREAM_FAIL,               /* Kernel create stream failed */
-       LTTCOMM_KERN_DIR_FAIL,                  /* Kernel trace directory creation failed */
-       LTTCOMM_KERN_DIR_EXIST,                 /* Kernel trace directory exist */
-       LTTCOMM_KERN_NO_SESSION,                /* No kernel session found */
-       LTTCOMM_KERN_LIST_FAIL,                 /* Kernel listing events failed */
-       KCONSUMERD_COMMAND_SOCK_READY,  /* when kconsumerd command socket ready */
-       KCONSUMERD_SUCCESS_RECV_FD,             /* success on receiving fds */
-       KCONSUMERD_ERROR_RECV_FD,               /* error on receiving fds */
-       KCONSUMERD_POLL_ERROR,                  /* Error in polling thread in kconsumerd */
-       KCONSUMERD_POLL_NVAL,                   /* Poll on closed fd */
-       KCONSUMERD_POLL_HUP,                    /* All fds have hungup */
-       KCONSUMERD_EXIT_SUCCESS,                /* kconsumerd exiting normally */
-       KCONSUMERD_EXIT_FAILURE,                /* kconsumerd exiting on error */
-       KCONSUMERD_OUTFD_ERROR,                 /* error opening the tracefile */
-       KCONSUMERD_SPLICE_EBADF,                /* EBADF from splice(2) */
-       KCONSUMERD_SPLICE_EINVAL,               /* EINVAL from splice(2) */
-       KCONSUMERD_SPLICE_ENOMEM,               /* ENOMEM from splice(2) */
-       KCONSUMERD_SPLICE_ESPIPE,               /* ESPIPE from splice(2) */
-       /* MUST be last element */
-       LTTCOMM_NR,                                             /* Last element */
-};
-
-#define LTTNG_SYM_NAME_LEN     128
-
-enum lttng_ust_instrumentation {
-       LTTNG_UST_TRACEPOINT    = 0,
-       LTTNG_UST_PROBE         = 1,
-       LTTNG_UST_FUNCTION      = 2,
-};
-
-enum lttng_ust_output {
-       LTTNG_UST_MMAP          = 0,
-};
-
-struct lttng_ust_tracer_version {
-       uint32_t version;
-       uint32_t patchlevel;
-       uint32_t sublevel;
-};
-
-struct lttng_ust_channel {
-       int overwrite;                          /* 1: overwrite, 0: discard */
-       uint64_t subbuf_size;                   /* in bytes */
-       uint64_t num_subbuf;
-       unsigned int switch_timer_interval;     /* usecs */
-       unsigned int read_timer_interval;       /* usecs */
-       enum lttng_ust_output output;           /* output mode */
-};
-
-struct lttng_ust_event {
-       char name[LTTNG_SYM_NAME_LEN];  /* event name */
-       enum lttng_ust_instrumentation instrumentation;
-       /* Per instrumentation type configuration */
-       union {
-       } u;
-};
-
-enum lttng_ust_context_type {
-       LTTNG_KERNEL_CONTEXT_VTID               = 0,
-};
-
-struct lttng_ust_context {
-       enum lttng_ust_context_type ctx;
-       union {
-       } u;
-};
-
-/*
- * Data structure for the commands sent from sessiond to UST.
- */
-struct lttcomm_ust_msg {
-       uint32_t cmd_type;    /* enum lttcomm_ust_command */
-       uint32_t handle;
-       union {
-               struct lttng_ust_tracer_version version;
-               struct lttng_ust_channel channel;
-               struct lttng_ust_event event;
-               struct lttng_ust_context context;
-       } u;
-};
-
-/*
- * Data structure for the response from UST to the session daemon.
- * cmd_type is sent back in the reply for validation.
- */
-struct lttcomm_ust_reply {
-       uint32_t cmd_type;      /* enum lttcomm_sessiond_command */
-       uint32_t ret_code;      /* enum enum lttcomm_return_code */
-       uint32_t ret_val;       /* return value */
-       union {
-       } u;
-};
-
-extern int lttcomm_create_unix_sock(const char *pathname);
-extern int lttcomm_connect_unix_sock(const char *pathname);
-extern int lttcomm_accept_unix_sock(int sock);
-extern int lttcomm_listen_unix_sock(int sock);
-extern int lttcomm_close_unix_sock(int sock);
-/* Send fd(s) over a unix socket. */
-extern ssize_t lttcomm_send_fds_unix_sock(int sock, void *buf, int *fds,
-               size_t nb_fd, size_t len);
-extern ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len);
-extern ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len);
-extern const char *lttcomm_get_readable_code(enum lttcomm_return_code code);
-
-#endif /* _LTTNG_SESSIOND_COMM_H */
diff --git a/include/lttng-ust-comm.h b/include/lttng-ust-comm.h
new file mode 100644 (file)
index 0000000..6914cc2
--- /dev/null
@@ -0,0 +1,177 @@
+#ifndef _LTTNG_UST_COMM_H
+#define _LTTNG_UST_COMM_H
+
+/*
+ * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
+ *                      Julien Desfossez <julien.desfossez@polymtl.ca>
+ *                      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; only version 2
+ * of the License.
+ * 
+ * This program 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.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+/*
+ * This header is meant for liblttng and libust internal use ONLY.
+ * These declarations should NOT be considered stable API.
+ */
+
+#include <limits.h>
+#include <lttng/lttng.h>
+#include <ust/lttng-ust-abi.h>
+
+#define LTTNG_RUNDIR                        "/var/run/lttng"
+
+/* Default unix socket path */
+#define DEFAULT_GLOBAL_CLIENT_UNIX_SOCK     LTTNG_RUNDIR "/client-ltt-sessiond"
+#define DEFAULT_GLOBAL_APPS_UNIX_SOCK       LTTNG_RUNDIR "/apps-ltt-sessiond"
+#define DEFAULT_HOME_APPS_UNIX_SOCK         "%s/.apps-ltt-sessiond"
+#define DEFAULT_HOME_CLIENT_UNIX_SOCK       "%s/.client-ltt-sessiond"
+
+/* Queue size of listen(2) */
+#define MAX_LISTEN 10
+
+/* Get the error code index from 0 since
+ * LTTCOMM_OK start at 1000
+ */
+#define LTTCOMM_ERR_INDEX(code) (code - LTTCOMM_OK)
+
+enum lttcomm_ust_command {
+       UST_CREATE_SESSION,
+       UST_RELEASE_SESSION,
+       UST_VERSION,
+       UST_LIST_TRACEPOINTS,
+       UST_WAIT_QUIESCENT,
+       UST_CALIBRATE,
+
+       /* Apply on session handle */
+       UST_METADATA,   /* release with UST_RELEASE_CHANNEL */
+       UST_CHANNEL,
+       UST_RELEASE_CHANNEL,
+       UST_SESSION_START,
+       UST_SESSION_STOP,
+
+       /* Apply on channel handle */
+       UST_STREAM,
+       UST_RELEASE_STREAM,
+       UST_EVENT,
+       UST_RELEASE_EVENT,
+
+       /* Apply on event and channel handle */
+       UST_CONTEXT,
+       UST_RELEASE_CONTEXT,
+
+       /* Apply on event, channel and session handle */
+       UST_ENABLE,
+       UST_DISABLE,
+};
+
+/*
+ * lttcomm error code.
+ */
+enum lttcomm_return_code {
+       LTTCOMM_OK = 1000,                              /* Ok */
+       LTTCOMM_ERR,                                    /* Unknown Error */
+       LTTCOMM_UND,                                    /* Undefine command */
+       LTTCOMM_NOT_IMPLEMENTED,        /* Command not implemented */
+       LTTCOMM_UNKNOWN_DOMAIN,         /* Tracing domain not known */
+       LTTCOMM_ALLOC_FAIL,                             /* Trace allocation fail */
+       LTTCOMM_NO_SESSION,                             /* No session found */
+       LTTCOMM_CREATE_FAIL,                    /* Create trace fail */
+       LTTCOMM_SESSION_FAIL,                   /* Create session fail */
+       LTTCOMM_START_FAIL,                             /* Start tracing fail */
+       LTTCOMM_STOP_FAIL,                              /* Stop tracing fail */
+       LTTCOMM_LIST_FAIL,                              /* Listing apps fail */
+       LTTCOMM_NO_APPS,                                /* No traceable application */
+       LTTCOMM_SESS_NOT_FOUND,                 /* Session name not found */
+       LTTCOMM_NO_TRACE,                               /* No trace exist */
+       LTTCOMM_FATAL,                                  /* Session daemon had a fatal error */
+       LTTCOMM_NO_TRACEABLE,                   /* Error for non traceable app */
+       LTTCOMM_SELECT_SESS,                    /* Must select a session */
+       LTTCOMM_EXIST_SESS,                             /* Session name already exist */
+       LTTCOMM_NO_EVENT,                               /* No event found */
+       LTTCOMM_KERN_NA,                                /* Kernel tracer unavalable */
+       LTTCOMM_KERN_EVENT_EXIST,       /* Kernel event already exists */
+       LTTCOMM_KERN_SESS_FAIL,                 /* Kernel create session failed */
+       LTTCOMM_KERN_CHAN_FAIL,                 /* Kernel create channel failed */
+       LTTCOMM_KERN_CHAN_NOT_FOUND,    /* Kernel channel not found */
+       LTTCOMM_KERN_CHAN_DISABLE_FAIL, /* Kernel disable channel failed */
+       LTTCOMM_KERN_CHAN_ENABLE_FAIL,  /* Kernel enable channel failed */
+       LTTCOMM_KERN_CONTEXT_FAIL,      /* Kernel add context failed */
+       LTTCOMM_KERN_ENABLE_FAIL,               /* Kernel enable event failed */
+       LTTCOMM_KERN_DISABLE_FAIL,              /* Kernel disable event failed */
+       LTTCOMM_KERN_META_FAIL,                 /* Kernel open metadata failed */
+       LTTCOMM_KERN_START_FAIL,                /* Kernel start trace failed */
+       LTTCOMM_KERN_STOP_FAIL,                 /* Kernel stop trace failed */
+       LTTCOMM_KERN_CONSUMER_FAIL,             /* Kernel consumer start failed */
+       LTTCOMM_KERN_STREAM_FAIL,               /* Kernel create stream failed */
+       LTTCOMM_KERN_DIR_FAIL,                  /* Kernel trace directory creation failed */
+       LTTCOMM_KERN_DIR_EXIST,                 /* Kernel trace directory exist */
+       LTTCOMM_KERN_NO_SESSION,                /* No kernel session found */
+       LTTCOMM_KERN_LIST_FAIL,                 /* Kernel listing events failed */
+       KCONSUMERD_COMMAND_SOCK_READY,  /* when kconsumerd command socket ready */
+       KCONSUMERD_SUCCESS_RECV_FD,             /* success on receiving fds */
+       KCONSUMERD_ERROR_RECV_FD,               /* error on receiving fds */
+       KCONSUMERD_POLL_ERROR,                  /* Error in polling thread in kconsumerd */
+       KCONSUMERD_POLL_NVAL,                   /* Poll on closed fd */
+       KCONSUMERD_POLL_HUP,                    /* All fds have hungup */
+       KCONSUMERD_EXIT_SUCCESS,                /* kconsumerd exiting normally */
+       KCONSUMERD_EXIT_FAILURE,                /* kconsumerd exiting on error */
+       KCONSUMERD_OUTFD_ERROR,                 /* error opening the tracefile */
+       KCONSUMERD_SPLICE_EBADF,                /* EBADF from splice(2) */
+       KCONSUMERD_SPLICE_EINVAL,               /* EINVAL from splice(2) */
+       KCONSUMERD_SPLICE_ENOMEM,               /* ENOMEM from splice(2) */
+       KCONSUMERD_SPLICE_ESPIPE,               /* ESPIPE from splice(2) */
+       /* MUST be last element */
+       LTTCOMM_NR,                                             /* Last element */
+};
+
+/*
+ * Data structure for the commands sent from sessiond to UST.
+ */
+struct lttcomm_ust_msg {
+       uint32_t cmd_type;    /* enum lttcomm_ust_command */
+       uint32_t handle;
+       union {
+               struct lttng_ust_tracer_version version;
+               struct lttng_ust_channel channel;
+               struct lttng_ust_event event;
+               struct lttng_ust_context context;
+       } u;
+};
+
+/*
+ * Data structure for the response from UST to the session daemon.
+ * cmd_type is sent back in the reply for validation.
+ */
+struct lttcomm_ust_reply {
+       uint32_t cmd_type;      /* enum lttcomm_sessiond_command */
+       uint32_t ret_code;      /* enum enum lttcomm_return_code */
+       uint32_t ret_val;       /* return value */
+       union {
+       } u;
+};
+
+extern int lttcomm_create_unix_sock(const char *pathname);
+extern int lttcomm_connect_unix_sock(const char *pathname);
+extern int lttcomm_accept_unix_sock(int sock);
+extern int lttcomm_listen_unix_sock(int sock);
+extern int lttcomm_close_unix_sock(int sock);
+/* Send fd(s) over a unix socket. */
+extern ssize_t lttcomm_send_fds_unix_sock(int sock, void *buf, int *fds,
+               size_t nb_fd, size_t len);
+extern ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len);
+extern ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len);
+extern const char *lttcomm_get_readable_code(enum lttcomm_return_code code);
+
+#endif /* _LTTNG_UST_COMM_H */
index f8ba13e56182c0cedec175016d52bc3b4eb8a37c..16c49d1665da1f059fe59ec8df4dee367906362c 100644 (file)
 
 #define LTTNG_UST_SYM_NAME_LEN 128
 
+#define LTTNG_UST_COMM_VERSION_MAJOR           0
+#define LTTNG_UST_COMM_VERSION_MINOR           1
+
 enum lttng_ust_instrumentation {
        LTTNG_UST_TRACEPOINT    = 0,
+       LTTNG_UST_PROBE         = 1,
+       LTTNG_UST_FUNCTION      = 2,
 };
 
-/*
- * LTTng consumer mode
- */
 enum lttng_ust_output {
-       LTTNG_UST_MMAP  = 0,
+       LTTNG_UST_MMAP          = 0,
 };
 
-/*
- * LTTng DebugFS ABI structures.
- */
+struct lttng_ust_tracer_version {
+       uint32_t version;
+       uint32_t patchlevel;
+       uint32_t sublevel;
+};
 
 struct lttng_ust_channel {
        int overwrite;                          /* 1: overwrite, 0: discard */
@@ -36,7 +40,7 @@ struct lttng_ust_channel {
        uint64_t num_subbuf;
        unsigned int switch_timer_interval;     /* usecs */
        unsigned int read_timer_interval;       /* usecs */
-       enum lttng_ust_output output;           /* mmap */
+       enum lttng_ust_output output;           /* output mode */
 };
 
 struct lttng_ust_event {
@@ -47,12 +51,6 @@ struct lttng_ust_event {
        } u;
 };
 
-struct lttng_ust_tracer_version {
-       uint32_t version;
-       uint32_t patchlevel;
-       uint32_t sublevel;
-};
-
 enum lttng_ust_context_type {
        LTTNG_UST_CONTEXT_VTID                  = 0,
 };
@@ -95,4 +93,6 @@ struct lttng_ust_context {
 #define LTTNG_UST_ENABLE                       _UST_CMD(0x80)
 #define LTTNG_UST_DISABLE                      _UST_CMD(0x81)
 
+void lttng_ust_abi_exit(void);
+
 #endif /* _LTTNG_UST_ABI_H */
diff --git a/liblttng-sessiond-comm/Makefile.am b/liblttng-sessiond-comm/Makefile.am
deleted file mode 100644 (file)
index 5ddd39c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-AM_CPPFLAGS = -I$(top_srcdir)/include
-
-noinst_LTLIBRARIES = liblttng-sessiond-comm.la
-
-liblttng_sessiond_comm_la_SOURCES = lttng-sessiond-comm.c \
-                                   lttng-sessiond-comm.h
diff --git a/liblttng-sessiond-comm/lttng-sessiond-comm.c b/liblttng-sessiond-comm/lttng-sessiond-comm.c
deleted file mode 100644 (file)
index 53e7462..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright (C)  2011 - David Goulet <david.goulet@polymtl.ca>
- *
- * 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; only version 2
- * of the License.
- * 
- * This program 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.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#define _GNU_SOURCE
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include <lttng-sessiond-comm.h>
-
-/*
- * Human readable error message.
- */
-static const char *lttcomm_readable_code[] = {
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_OK) ] = "Success",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_ERR) ] = "Unknown error",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_UND) ] = "Undefined command",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_NOT_IMPLEMENTED) ] = "Not implemented",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_UNKNOWN_DOMAIN) ] = "Unknown tracing domain",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_SESSION) ] = "No session found",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_LIST_FAIL) ] = "Unable to list traceable apps",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_APPS) ] = "No traceable apps found",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_SESS_NOT_FOUND) ] = "Session name not found",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_TRACE) ] = "No trace found",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_FATAL) ] = "Fatal error of the session daemon",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_CREATE_FAIL) ] = "Create trace failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_START_FAIL) ] = "Start trace failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_STOP_FAIL) ] = "Stop trace failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_TRACEABLE) ] = "App is not traceable",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_SELECT_SESS) ] = "A session MUST be selected",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_EXIST_SESS) ] = "Session name already exist",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_NA) ] = "Kernel tracer not available",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_EVENT_EXIST) ] = "Kernel event already exists",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_SESS_FAIL) ] = "Kernel create session failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_FAIL) ] = "Kernel create channel failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_NOT_FOUND) ] = "Kernel channel not found",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_DISABLE_FAIL) ] = "Disable kernel channel failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_ENABLE_FAIL) ] = "Enable kernel channel failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CONTEXT_FAIL) ] = "Add kernel context failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_ENABLE_FAIL) ] = "Enable kernel event failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_DISABLE_FAIL) ] = "Disable kernel event failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_META_FAIL) ] = "Opening metadata failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_START_FAIL) ] = "Starting kernel trace failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_STOP_FAIL) ] = "Stoping kernel trace failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CONSUMER_FAIL) ] = "Kernel consumer start failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_STREAM_FAIL) ] = "Kernel create stream failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_DIR_FAIL) ] = "Kernel trace directory creation failed",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_DIR_EXIST) ] = "Kernel trace directory already exist",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_NO_SESSION) ] = "No kernel session found",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_LIST_FAIL) ] = "Listing kernel events failed",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_COMMAND_SOCK_READY) ] = "Kconsumerd command socket ready",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SUCCESS_RECV_FD) ] = "Kconsumerd success on receiving fds",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_ERROR_RECV_FD) ] = "Kconsumerd error on receiving fds",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_POLL_ERROR) ] = "Kconsumerd error in polling thread",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_POLL_NVAL) ] = "Kconsumerd polling on closed fd",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_POLL_HUP) ] = "Kconsumerd all fd hung up",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_EXIT_SUCCESS) ] = "Kconsumerd exiting normally",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_EXIT_FAILURE) ] = "Kconsumerd exiting on error",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_OUTFD_ERROR) ] = "Kconsumerd error opening the tracefile",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_EBADF) ] = "Kconsumerd splice EBADF",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_EINVAL) ] = "Kconsumerd splice EINVAL",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_ENOMEM) ] = "Kconsumerd splice ENOMEM",
-       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_ESPIPE) ] = "Kconsumerd splice ESPIPE",
-       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_EVENT) ] = "Event not found",
-};
-
-/*
- *  lttcom_get_readable_code
- *
- *  Return ptr to string representing a human readable
- *  error code from the lttcomm_return_code enum.
- *
- *  These code MUST be negative in other to treat that
- *  as an error value.
- */
-const char *lttcomm_get_readable_code(enum lttcomm_return_code code)
-{
-       int tmp_code = -code;
-
-       if (tmp_code >= LTTCOMM_OK && tmp_code < LTTCOMM_NR) {
-               return lttcomm_readable_code[LTTCOMM_ERR_INDEX(tmp_code)];
-       }
-
-       return "Unknown error code";
-}
-
-/*
- *     lttcomm_connect_unix_sock
- *
- *     Connect to unix socket using the path name.
- */
-int lttcomm_connect_unix_sock(const char *pathname)
-{
-       struct sockaddr_un sun;
-       int fd;
-       int ret;
-
-       /*
-        * libust threads require the close-on-exec flag for all
-        * resources so it does not leak file descriptors upon exec.
-        */
-       fd = socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
-       if (fd < 0) {
-               perror("socket");
-               ret = fd;
-               goto error;
-       }
-
-       memset(&sun, 0, sizeof(sun));
-       sun.sun_family = AF_UNIX;
-       strncpy(sun.sun_path, pathname, sizeof(sun.sun_path));
-       sun.sun_path[sizeof(sun.sun_path) - 1] = '\0';
-
-       ret = connect(fd, (struct sockaddr *) &sun, sizeof(sun));
-       if (ret < 0) {
-               /*
-                * Don't print message on connect error, because connect
-                * is used in normal execution to detect if sessiond is
-                * alive.
-                */
-               goto error_connect;
-       }
-
-       return fd;
-
-error_connect:
-       close(fd);
-error:
-       return ret;
-}
-
-/*
- *     lttcomm_accept_unix_sock
- *
- *     Do an accept(2) on the sock and return the
- *     new file descriptor. The socket MUST be bind(2) before.
- */
-int lttcomm_accept_unix_sock(int sock)
-{
-       int new_fd;
-       struct sockaddr_un sun;
-       socklen_t len = 0;
-
-       /* Blocking call */
-       new_fd = accept(sock, (struct sockaddr *) &sun, &len);
-       if (new_fd < 0) {
-               perror("accept");
-               goto error;
-       }
-
-       return new_fd;
-
-error:
-       return -1;
-}
-
-/*
- *     lttcomm_create_unix_sock
- *
- *     Creates a AF_UNIX local socket using pathname
- *     bind the socket upon creation and return the fd.
- */
-int lttcomm_create_unix_sock(const char *pathname)
-{
-       struct sockaddr_un sun;
-       int fd;
-       int ret = -1;
-
-       /* Create server socket */
-       if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
-               perror("socket");
-               goto error;
-       }
-
-       memset(&sun, 0, sizeof(sun));
-       sun.sun_family = AF_UNIX;
-       strncpy(sun.sun_path, pathname, sizeof(sun.sun_path));
-       sun.sun_path[sizeof(sun.sun_path) - 1] = '\0';
-
-       /* Unlink the old file if present */
-       (void) unlink(pathname);
-       ret = bind(fd, (struct sockaddr *) &sun, sizeof(sun));
-       if (ret < 0) {
-               perror("bind");
-               goto error;
-       }
-
-       return fd;
-
-error:
-       return ret;
-}
-
-/*
- *     lttcomm_listen_unix_sock
- *
- *     Make the socket listen using MAX_LISTEN.
- */
-int lttcomm_listen_unix_sock(int sock)
-{
-       int ret;
-
-       ret = listen(sock, MAX_LISTEN);
-       if (ret < 0) {
-               perror("listen");
-       }
-
-       return ret;
-}
-
-/*
- *     lttcomm_recv_unix_sock
- *
- *  Receive data of size len in put that data into
- *  the buf param. Using recvmsg API.
- *  Return the size of received data.
- */
-ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len)
-{
-       struct msghdr msg = { 0 };
-       struct iovec iov[1];
-       ssize_t ret = -1;
-
-       iov[0].iov_base = buf;
-       iov[0].iov_len = len;
-       msg.msg_iov = iov;
-       msg.msg_iovlen = 1;
-
-       ret = recvmsg(sock, &msg, 0);
-       if (ret < 0) {
-               perror("recvmsg");
-       }
-
-       return ret;
-}
-
-/*
- *     lttcomm_send_unix_sock
- *
- *     Send buf data of size len. Using sendmsg API.
- *     Return the size of sent data.
- */
-ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len)
-{
-       struct msghdr msg = { 0 };
-       struct iovec iov[1];
-       ssize_t ret = -1;
-
-       iov[0].iov_base = buf;
-       iov[0].iov_len = len;
-       msg.msg_iov = iov;
-       msg.msg_iovlen = 1;
-
-       ret = sendmsg(sock, &msg, 0);
-       if (ret < 0) {
-               perror("sendmsg");
-       }
-
-       return ret;
-}
-
-/*
- *  lttcomm_close_unix_sock
- *
- *  Shutdown cleanly a unix socket.
- */
-int lttcomm_close_unix_sock(int sock)
-{
-       int ret;
-
-       /* Shutdown receptions and transmissions */
-       ret = shutdown(sock, SHUT_RDWR);
-       if (ret < 0) {
-               perror("shutdown");
-       }
-
-       return ret;
-}
-
-/*
- *  lttcomm_send_fds_unix_sock
- *
- *  Send multiple fds on a unix socket.
- */
-ssize_t lttcomm_send_fds_unix_sock(int sock, void *buf, int *fds, size_t nb_fd, size_t len)
-{
-       struct msghdr msg = { 0 };
-       struct cmsghdr *cmptr;
-       struct iovec iov[1];
-       ssize_t ret = -1;
-       unsigned int sizeof_fds = nb_fd * sizeof(int);
-       char tmp[CMSG_SPACE(sizeof_fds)];
-
-       /*
-        * Note: the consumerd receiver only supports receiving one FD per
-        * message.
-        */
-       assert(nb_fd == 1);
-
-       msg.msg_control = (caddr_t)tmp;
-       msg.msg_controllen = CMSG_LEN(sizeof_fds);
-
-       cmptr = CMSG_FIRSTHDR(&msg);
-       cmptr->cmsg_level = SOL_SOCKET;
-       cmptr->cmsg_type = SCM_RIGHTS;
-       cmptr->cmsg_len = CMSG_LEN(sizeof_fds);
-       memcpy(CMSG_DATA(cmptr), fds, sizeof_fds);
-       /* Sum of the length of all control messages in the buffer: */
-       msg.msg_controllen = cmptr->cmsg_len;
-
-       iov[0].iov_base = buf;
-       iov[0].iov_len = len;
-       msg.msg_iov = iov;
-       msg.msg_iovlen = 1;
-
-       ret = sendmsg(sock, &msg, 0);
-       if (ret < 0) {
-               perror("sendmsg");
-       }
-
-       return ret;
-}
diff --git a/liblttng-ust-comm/Makefile.am b/liblttng-ust-comm/Makefile.am
new file mode 100644 (file)
index 0000000..2ae997c
--- /dev/null
@@ -0,0 +1,5 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+noinst_LTLIBRARIES = liblttng-ust-comm.la
+
+liblttng_ust_comm_la_SOURCES = lttng-ust-comm.c
diff --git a/liblttng-ust-comm/lttng-ust-comm.c b/liblttng-ust-comm/lttng-ust-comm.c
new file mode 100644 (file)
index 0000000..214f6e4
--- /dev/null
@@ -0,0 +1,344 @@
+/*
+ * Copyright (C)  2011 - David Goulet <david.goulet@polymtl.ca>
+ *
+ * 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; only version 2
+ * of the License.
+ * 
+ * This program 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.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#define _GNU_SOURCE
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/un.h>
+#include <unistd.h>
+#include <assert.h>
+
+#include <lttng-ust-comm.h>
+
+/*
+ * Human readable error message.
+ */
+static const char *lttcomm_readable_code[] = {
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_OK) ] = "Success",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_ERR) ] = "Unknown error",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_UND) ] = "Undefined command",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_NOT_IMPLEMENTED) ] = "Not implemented",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_UNKNOWN_DOMAIN) ] = "Unknown tracing domain",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_SESSION) ] = "No session found",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_LIST_FAIL) ] = "Unable to list traceable apps",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_APPS) ] = "No traceable apps found",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_SESS_NOT_FOUND) ] = "Session name not found",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_TRACE) ] = "No trace found",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_FATAL) ] = "Fatal error of the session daemon",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_CREATE_FAIL) ] = "Create trace failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_START_FAIL) ] = "Start trace failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_STOP_FAIL) ] = "Stop trace failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_TRACEABLE) ] = "App is not traceable",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_SELECT_SESS) ] = "A session MUST be selected",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_EXIST_SESS) ] = "Session name already exist",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_NA) ] = "Kernel tracer not available",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_EVENT_EXIST) ] = "Kernel event already exists",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_SESS_FAIL) ] = "Kernel create session failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_FAIL) ] = "Kernel create channel failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_NOT_FOUND) ] = "Kernel channel not found",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_DISABLE_FAIL) ] = "Disable kernel channel failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_ENABLE_FAIL) ] = "Enable kernel channel failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CONTEXT_FAIL) ] = "Add kernel context failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_ENABLE_FAIL) ] = "Enable kernel event failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_DISABLE_FAIL) ] = "Disable kernel event failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_META_FAIL) ] = "Opening metadata failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_START_FAIL) ] = "Starting kernel trace failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_STOP_FAIL) ] = "Stoping kernel trace failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CONSUMER_FAIL) ] = "Kernel consumer start failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_STREAM_FAIL) ] = "Kernel create stream failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_DIR_FAIL) ] = "Kernel trace directory creation failed",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_DIR_EXIST) ] = "Kernel trace directory already exist",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_NO_SESSION) ] = "No kernel session found",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_LIST_FAIL) ] = "Listing kernel events failed",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_COMMAND_SOCK_READY) ] = "Kconsumerd command socket ready",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SUCCESS_RECV_FD) ] = "Kconsumerd success on receiving fds",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_ERROR_RECV_FD) ] = "Kconsumerd error on receiving fds",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_POLL_ERROR) ] = "Kconsumerd error in polling thread",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_POLL_NVAL) ] = "Kconsumerd polling on closed fd",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_POLL_HUP) ] = "Kconsumerd all fd hung up",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_EXIT_SUCCESS) ] = "Kconsumerd exiting normally",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_EXIT_FAILURE) ] = "Kconsumerd exiting on error",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_OUTFD_ERROR) ] = "Kconsumerd error opening the tracefile",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_EBADF) ] = "Kconsumerd splice EBADF",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_EINVAL) ] = "Kconsumerd splice EINVAL",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_ENOMEM) ] = "Kconsumerd splice ENOMEM",
+       [ LTTCOMM_ERR_INDEX(KCONSUMERD_SPLICE_ESPIPE) ] = "Kconsumerd splice ESPIPE",
+       [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_EVENT) ] = "Event not found",
+};
+
+/*
+ *  lttcom_get_readable_code
+ *
+ *  Return ptr to string representing a human readable
+ *  error code from the lttcomm_return_code enum.
+ *
+ *  These code MUST be negative in other to treat that
+ *  as an error value.
+ */
+const char *lttcomm_get_readable_code(enum lttcomm_return_code code)
+{
+       int tmp_code = -code;
+
+       if (tmp_code >= LTTCOMM_OK && tmp_code < LTTCOMM_NR) {
+               return lttcomm_readable_code[LTTCOMM_ERR_INDEX(tmp_code)];
+       }
+
+       return "Unknown error code";
+}
+
+/*
+ *     lttcomm_connect_unix_sock
+ *
+ *     Connect to unix socket using the path name.
+ */
+int lttcomm_connect_unix_sock(const char *pathname)
+{
+       struct sockaddr_un sun;
+       int fd;
+       int ret;
+
+       /*
+        * libust threads require the close-on-exec flag for all
+        * resources so it does not leak file descriptors upon exec.
+        */
+       fd = socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
+       if (fd < 0) {
+               perror("socket");
+               ret = fd;
+               goto error;
+       }
+
+       memset(&sun, 0, sizeof(sun));
+       sun.sun_family = AF_UNIX;
+       strncpy(sun.sun_path, pathname, sizeof(sun.sun_path));
+       sun.sun_path[sizeof(sun.sun_path) - 1] = '\0';
+
+       ret = connect(fd, (struct sockaddr *) &sun, sizeof(sun));
+       if (ret < 0) {
+               /*
+                * Don't print message on connect error, because connect
+                * is used in normal execution to detect if sessiond is
+                * alive.
+                */
+               goto error_connect;
+       }
+
+       return fd;
+
+error_connect:
+       close(fd);
+error:
+       return ret;
+}
+
+/*
+ *     lttcomm_accept_unix_sock
+ *
+ *     Do an accept(2) on the sock and return the
+ *     new file descriptor. The socket MUST be bind(2) before.
+ */
+int lttcomm_accept_unix_sock(int sock)
+{
+       int new_fd;
+       struct sockaddr_un sun;
+       socklen_t len = 0;
+
+       /* Blocking call */
+       new_fd = accept(sock, (struct sockaddr *) &sun, &len);
+       if (new_fd < 0) {
+               perror("accept");
+               goto error;
+       }
+
+       return new_fd;
+
+error:
+       return -1;
+}
+
+/*
+ *     lttcomm_create_unix_sock
+ *
+ *     Creates a AF_UNIX local socket using pathname
+ *     bind the socket upon creation and return the fd.
+ */
+int lttcomm_create_unix_sock(const char *pathname)
+{
+       struct sockaddr_un sun;
+       int fd;
+       int ret = -1;
+
+       /* Create server socket */
+       if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
+               perror("socket");
+               goto error;
+       }
+
+       memset(&sun, 0, sizeof(sun));
+       sun.sun_family = AF_UNIX;
+       strncpy(sun.sun_path, pathname, sizeof(sun.sun_path));
+       sun.sun_path[sizeof(sun.sun_path) - 1] = '\0';
+
+       /* Unlink the old file if present */
+       (void) unlink(pathname);
+       ret = bind(fd, (struct sockaddr *) &sun, sizeof(sun));
+       if (ret < 0) {
+               perror("bind");
+               goto error;
+       }
+
+       return fd;
+
+error:
+       return ret;
+}
+
+/*
+ *     lttcomm_listen_unix_sock
+ *
+ *     Make the socket listen using MAX_LISTEN.
+ */
+int lttcomm_listen_unix_sock(int sock)
+{
+       int ret;
+
+       ret = listen(sock, MAX_LISTEN);
+       if (ret < 0) {
+               perror("listen");
+       }
+
+       return ret;
+}
+
+/*
+ *     lttcomm_recv_unix_sock
+ *
+ *  Receive data of size len in put that data into
+ *  the buf param. Using recvmsg API.
+ *  Return the size of received data.
+ */
+ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len)
+{
+       struct msghdr msg = { 0 };
+       struct iovec iov[1];
+       ssize_t ret = -1;
+
+       iov[0].iov_base = buf;
+       iov[0].iov_len = len;
+       msg.msg_iov = iov;
+       msg.msg_iovlen = 1;
+
+       ret = recvmsg(sock, &msg, 0);
+       if (ret < 0) {
+               perror("recvmsg");
+       }
+
+       return ret;
+}
+
+/*
+ *     lttcomm_send_unix_sock
+ *
+ *     Send buf data of size len. Using sendmsg API.
+ *     Return the size of sent data.
+ */
+ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len)
+{
+       struct msghdr msg = { 0 };
+       struct iovec iov[1];
+       ssize_t ret = -1;
+
+       iov[0].iov_base = buf;
+       iov[0].iov_len = len;
+       msg.msg_iov = iov;
+       msg.msg_iovlen = 1;
+
+       ret = sendmsg(sock, &msg, 0);
+       if (ret < 0) {
+               perror("sendmsg");
+       }
+
+       return ret;
+}
+
+/*
+ *  lttcomm_close_unix_sock
+ *
+ *  Shutdown cleanly a unix socket.
+ */
+int lttcomm_close_unix_sock(int sock)
+{
+       int ret;
+
+       /* Shutdown receptions and transmissions */
+       ret = shutdown(sock, SHUT_RDWR);
+       if (ret < 0) {
+               perror("shutdown");
+       }
+
+       return ret;
+}
+
+/*
+ *  lttcomm_send_fds_unix_sock
+ *
+ *  Send multiple fds on a unix socket.
+ */
+ssize_t lttcomm_send_fds_unix_sock(int sock, void *buf, int *fds, size_t nb_fd, size_t len)
+{
+       struct msghdr msg = { 0 };
+       struct cmsghdr *cmptr;
+       struct iovec iov[1];
+       ssize_t ret = -1;
+       unsigned int sizeof_fds = nb_fd * sizeof(int);
+       char tmp[CMSG_SPACE(sizeof_fds)];
+
+       /*
+        * Note: the consumerd receiver only supports receiving one FD per
+        * message.
+        */
+       assert(nb_fd == 1);
+
+       msg.msg_control = (caddr_t)tmp;
+       msg.msg_controllen = CMSG_LEN(sizeof_fds);
+
+       cmptr = CMSG_FIRSTHDR(&msg);
+       cmptr->cmsg_level = SOL_SOCKET;
+       cmptr->cmsg_type = SCM_RIGHTS;
+       cmptr->cmsg_len = CMSG_LEN(sizeof_fds);
+       memcpy(CMSG_DATA(cmptr), fds, sizeof_fds);
+       /* Sum of the length of all control messages in the buffer: */
+       msg.msg_controllen = cmptr->cmsg_len;
+
+       iov[0].iov_base = buf;
+       iov[0].iov_len = len;
+       msg.msg_iov = iov;
+       msg.msg_iovlen = 1;
+
+       ret = sendmsg(sock, &msg, 0);
+       if (ret < 0) {
+               perror("sendmsg");
+       }
+
+       return ret;
+}
index d72d4691f5ff654f9ec69102ade7ad6e4c7936c9..0a6834ae245f784e78b46d8950c32bdc73245102 100644 (file)
@@ -29,6 +29,6 @@ libust_la_LIBADD = \
        -luuid \
        $(top_builddir)/snprintf/libustsnprintf.la \
        $(top_builddir)/libringbuffer/libringbuffer.la \
-       $(top_builddir)/liblttng-sessiond-comm/liblttng-sessiond-comm.la
+       $(top_builddir)/liblttng-ust-comm/liblttng-ust-comm.la
 
 libust_la_CFLAGS = -DUST_COMPONENT="libust" -fno-strict-aliasing
index 13b94c4d7315b908d41fd389b87094ef7be1391b..fee3d0750022becad801f34979a62e11224bcf0c 100644 (file)
@@ -704,14 +704,7 @@ static const struct objd_ops lttng_event_ops = {
        .cmd = lttng_event_cmd,
 };
 
-void __attribute__((constructor)) lttng_ust_abi_init(void)
-{
-       init_usterr();
-       /* TODO: initialize socket */
-}
-
-static
-void __attribute__((destructor)) lttng_ust_abi_exit(void)
+void lttng_ust_abi_exit(void)
 {
        /* TODO: teardown socket */
        objd_table_destroy();
index e73d324d4815d1439cc756defe762a3897d2f270..c9cb777709dab0d84ffffebe26352fcfdfbde563 100644 (file)
@@ -23,7 +23,8 @@
 #include <sys/socket.h>
 #include <unistd.h>
 #include <errno.h>
-#include <lttng-sessiond-comm.h>
+#include <ust/lttng-ust-abi.h>
+#include <lttng-ust-comm.h>
 #include <ust/usterr-signal-safe.h>
 #include <pthread.h>
 
@@ -79,13 +80,13 @@ int handle_message(int sock, struct lttcomm_ust_msg *lum)
        int ret;
 
        switch (lum->cmd_type) {
-       case LTTNG_UST_CREATE_SESSION:
+       case UST_CREATE_SESSION:
        {
                struct lttcomm_ust_reply lur;
 
                DBG("Handling create session message");
                memset(&lur, 0, sizeof(lur));
-               lur.cmd_type = LTTNG_UST_CREATE_SESSION;
+               lur.cmd_type = UST_CREATE_SESSION;
 
                /* ... */
                ret = 0;
@@ -224,4 +225,5 @@ void __attribute__((destructor)) lttng_ust_comm_exit(void)
        if (ret) {
                ERR("Error cancelling local ust listener thread");
        }
+       lttng_ust_abi_exit();
 }
This page took 0.040255 seconds and 4 git commands to generate.