AC_CHECK_LIB([uuid], [uuid_generate],
[
AC_DEFINE_UNQUOTED([LTTNG_UST_HAVE_LIBUUID], 1, [Has libuuid support.])
+ have_libuuid=yes
],
[
# libuuid not found, check for uuid_create in libc.
AC_CHECK_LIB([c], [uuid_create],
[
AC_DEFINE_UNQUOTED([LTTNG_UST_HAVE_LIBC_UUID], 1, [Has libc uuid support.])
+ have_libc_uuid=yes
],
[
AC_MSG_ERROR([Cannot find libuuid uuid_generate nor libc uuid_create. Use [LDFLAGS]=-Ldir to specify its location.])
])
]
)
+AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBUUID], [test "x$have_libuuid" = "xyes"])
+AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBC_UUID], [test "x$have_libc_uuid" = "xyes"])
# Checks for header files.
#AC_CHECK_HEADERS([fcntl.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
#include <urcu/list.h>
#include <urcu/hlist.h>
-#include <uuid/uuid.h>
#include <stdint.h>
#include <lttng/ust-abi.h>
#include <lttng/ust-tracer.h>
#include <lttng/ust-endian.h>
#include <float.h>
+#define LTTNG_UST_UUID_LEN 16
+
struct ltt_channel;
struct ltt_session;
struct lttng_ust_lib_ring_buffer_ctx;
/* Channel ID, available for consumer too */
unsigned int id;
/* Copy of session UUID for consumer (availability through shm) */
- uuid_t uuid; /* Trace session unique ID */
+ unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
};
struct ltt_session {
struct cds_list_head wildcards; /* Wildcard list head */
struct cds_list_head list; /* Session list */
unsigned int free_chan_id; /* Next chan ID to allocate */
- uuid_t uuid; /* Trace session unique ID */
+ unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
unsigned int metadata_dumped:1;
};
compat.h \
wait.h \
jhash.h \
- error.h
+ error.h \
+ uuid.h
liblttng_ust_support_la_SOURCES = \
ltt-tracer.h \
liblttng_ust_la_LIBADD = \
-lpthread \
-lrt \
- -luuid \
-llttng-ust-tracepoint \
$(top_builddir)/snprintf/libustsnprintf.la \
$(top_builddir)/liblttng-ust-comm/liblttng-ust-comm.la \
liblttng-ust-runtime.la liblttng-ust-support.la
+if LTTNG_UST_BUILD_WITH_LIBUUID
+liblttng_ust_la_LIBADD += -luuid
+endif
+if LTTNG_UST_BUILD_WITH_LIBC_UUID
+liblttng_ust_la_LIBADD += -lc
+endif
+
liblttng_ust_la_CFLAGS = -DUST_COMPONENT="liblttng_ust" -fno-strict-aliasing
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
-
-/*
- * Includes final \0.
- */
-#define CLOCK_UUID_LEN 37
+#include "uuid.h"
/* TRACE CLOCK */
if (!fp) {
return -ENOENT;
}
- len = fread(uuid, 1, CLOCK_UUID_LEN - 1, fp);
- if (len < CLOCK_UUID_LEN - 1) {
+ len = fread(uuid, 1, LTTNG_UST_UUID_STR_LEN - 1, fp);
+ if (len < LTTNG_UST_UUID_STR_LEN - 1) {
ret = -EINVAL;
goto end;
}
- uuid[CLOCK_UUID_LEN - 1] = '\0';
+ uuid[LTTNG_UST_UUID_STR_LEN - 1] = '\0';
end:
fclose(fp);
return ret;
#include <urcu/list.h>
#include <urcu/hlist.h>
#include <pthread.h>
-#include <uuid/uuid.h>
#include <errno.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <helper.h>
#include "error.h"
#include "compat.h"
+#include "uuid.h"
#include "tracepoint-internal.h"
#include "ltt-tracer.h"
struct ltt_session *ltt_session_create(void)
{
struct ltt_session *session;
+ int ret;
session = zmalloc(sizeof(struct ltt_session));
if (!session)
CDS_INIT_LIST_HEAD(&session->chan);
CDS_INIT_LIST_HEAD(&session->events);
CDS_INIT_LIST_HEAD(&session->wildcards);
- uuid_generate(session->uuid);
+ ret = lttng_ust_uuid_generate(session->uuid);
+ if (ret != 0) {
+ session->uuid[0] = '\0';
+ }
cds_list_add(&session->list, &sessions);
return session;
}
int _ltt_session_metadata_statedump(struct ltt_session *session)
{
unsigned char *uuid_c = session->uuid;
- char uuid_s[37], clock_uuid_s[CLOCK_UUID_LEN];
+ char uuid_s[LTTNG_UST_UUID_STR_LEN],
+ clock_uuid_s[LTTNG_UST_UUID_STR_LEN];
struct ltt_channel *chan;
struct ltt_event *event;
int ret = 0;
#include <lttng/ust-events.h>
#include "lttng/bitfield.h"
#include "clock.h"
+#include "uuid.h"
#include "ltt-tracer.h"
#include "../libringbuffer/frontend_types.h"
* Trace magic number.
* contains endianness information.
*/
- uint8_t uuid[16];
+ uint8_t uuid[LTTNG_UST_UUID_LEN];
uint32_t stream_id;
struct {
struct metadata_packet_header {
uint32_t magic; /* 0x75D11D57 */
- uint8_t uuid[16]; /* Unique Universal Identifier */
+ uint8_t uuid[LTTNG_UST_UUID_LEN]; /* Unique Universal Identifier */
uint32_t checksum; /* 0 if unused */
uint32_t content_size; /* in bits */
uint32_t packet_size; /* in bits */
--- /dev/null
+#ifndef _LTTNG_UST_UUID_H
+#define _LTTNG_UST_UUID_H
+
+/*
+ * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose, provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ */
+
+#include <config.h>
+#include <lttng/ust-events.h> /* For LTTNG_UST_UUID_LEN */
+/*
+ * Includes final \0.
+ */
+#define LTTNG_UST_UUID_STR_LEN 37
+
+#include <uuid/uuid.h>
+
+#ifdef LTTNG_UST_HAVE_LIBUUID
+static inline
+int lttng_ust_uuid_generate(unsigned char *uuid_out)
+{
+ uuid_generate(uuid_out);
+ return 0;
+}
+
+#elif defined(LTTNG_UST_HAVE_LIBC_UUID)
+#include <uuid.h>
+#include <stdint.h>
+
+static inline
+int lttng_ust_uuid_generate(unsigned char *uuid_out)
+{
+ uint32_t status;
+
+ uuid_create(uuid_out, &status);
+ if (status == uuid_s_ok)
+ return 0;
+ else
+ return -1;
+}
+
+#else
+#error "LTTng-UST needs to have a UUID generator configured."
+#endif
+
+#endif /* _LTTNG_UST_UUID_H */