/*
- * Copyright (C) 2013 - David Goulet <dgoulet@efficios.com>
+ * Copyright (C) 2013 David Goulet <dgoulet@efficios.com>
*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License, version 2 only, as
- * published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
*
- * 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., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef LTTNG_UST_REGISTRY_H
#include <stdint.h>
#include <common/hashtable/hashtable.h>
-#include <common/compat/uuid.h>
+#include <common/uuid.h>
-#include "ust-ctl.h"
+#include "lttng-ust-ctl.h"
#define CTF_SPEC_MAJOR 1
#define CTF_SPEC_MINOR 8
/* Next enumeration ID available. */
uint64_t next_enum_id;
/* Universal unique identifier used by the tracer. */
- unsigned char uuid[UUID_LEN];
+ unsigned char uuid[LTTNG_UUID_LEN];
/* session ABI description */
/* Current version of the metadata. */
uint64_t metadata_version;
+ /*
+ * Those fields are only used when a session is created with
+ * the --shm-path option. In this case, the metadata is output
+ * twice: once to the consumer, as ususal, but a second time
+ * also in the shm path directly. This is done so that a copy
+ * of the metadata that is as fresh as possible is available
+ * on the event of a crash.
+ *
+ * root_shm_path contains the shm-path provided by the user, along with
+ * the session's name and timestamp:
+ * e.g. /tmp/my_shm/my_session-20180612-135822
+ *
+ * shm_path contains the full path of the memory buffers:
+ * e.g. /tmp/my_shm/my_session-20180612-135822/ust/uid/1000/64-bit
+ *
+ * metadata_path contains the full path to the metadata file that
+ * is kept for the "crash buffer" extraction:
+ * e.g. /tmp/my_shm/my_session-20180612-135822/ust/uid/1000/64-bit/metadata
+ *
+ * Note that this is not the trace's final metadata file. It is
+ * only meant to be used to read the contents of the ring buffers
+ * in the event of a crash.
+ *
+ * metadata_fd is a file descriptor that points to the file at
+ * 'metadata_path'.
+ */
char root_shm_path[PATH_MAX];
char shm_path[PATH_MAX];
char metadata_path[PATH_MAX];
*/
uint32_t major;
uint32_t minor;
+
+ /* The id of the parent session */
+ uint64_t tracing_id;
+ uid_t tracing_uid;
};
struct ust_registry_channel {
uint64_t key;
+ uint64_t consumer_key;
/* Id set when replying to a register channel. */
uint32_t chan_id;
enum ustctl_channel_header header_type;
int ust_registry_channel_add(struct ust_registry_session *session,
uint64_t key);
void ust_registry_channel_del_free(struct ust_registry_session *session,
- uint64_t key);
+ uint64_t key, bool notif);
int ust_registry_session_init(struct ust_registry_session **sessionp,
struct ust_app *app,
const char *root_shm_path,
const char *shm_path,
uid_t euid,
- gid_t egid);
+ gid_t egid,
+ uint64_t tracing_id,
+ uid_t tracing_uid);
void ust_registry_session_destroy(struct ust_registry_session *session);
int ust_registry_create_event(struct ust_registry_session *session,
}
static inline
void ust_registry_channel_del_free(struct ust_registry_session *session,
- uint64_t key)
+ uint64_t key, bool notif)
{}
static inline
int ust_registry_session_init(struct ust_registry_session **sessionp,
uint32_t uint32_t_alignment,
uint32_t uint64_t_alignment,
uint32_t long_alignment,
- int byte_order)
+ int byte_order,
+ uint32_t major,
+ uint32_t minor,
+ const char *root_shm_path,
+ const char *shm_path,
+ uid_t euid,
+ gid_t egid,
+ uint64_t tracing_id,
+ uid_t tracing_uid)
{
return 0;
}
/* The app object can be NULL for registry shared across applications. */
static inline
int ust_metadata_session_statedump(struct ust_registry_session *session,
- struct ust_app *app)
+ struct ust_app *app, uint32_t major, uint32_t minor)
{
return 0;
}