session->id, session->name);
}
+ ret = kernctl_session_set_trace_format(lks->fd, *session->trace_format);
+ if (ret) {
+ WARN("Could not set kernel session trace format %" PRIu64 " name: %s", session->id,
+ session->name);
+ }
return 0;
error:
return ret;
}
+int kernctl_session_set_trace_format(int fd, const lttng::trace_format_descriptor& trace_format)
+{
+ int ret;
+ struct lttng_kernel_abi_session_trace_format k_trace_format;
+
+ switch (trace_format.type()) {
+ case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_1:
+ k_trace_format.type = (uint32_t) LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF1;
+ break;
+ case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_2:
+ k_trace_format.type = (uint32_t) LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF2;
+ break;
+ case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_UNKNOWN:
+ /* Fallthrougth */
+ default:
+ ret = -EINVAL;
+ goto end;
+ }
+
+ ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_SET_TRACE_FORMAT, &k_trace_format);
+ if (ret == -ENOSYS) {
+ if (trace_format.type() != LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_1) {
+ /* Must never happen based on earlier error check */
+ abort();
+ } else {
+ /* Old modules default to ctf1 format. */
+ ret = 0;
+ }
+ }
+
+end:
+ return ret;
+}
int kernctl_create_stream(int fd)
{
return compat_ioctl_no_arg(fd, LTTNG_KERNEL_ABI_OLD_STREAM,
#include <stdbool.h>
-#include <lttng/lttng.h>
-#include <common/lttng-kernel.hpp>
#include <common/lttng-kernel-old.hpp>
-#include <common/sessiond-comm/sessiond-comm.hpp> /* for struct lttng_filter_bytecode */
+#include <common/lttng-kernel.hpp>
+#include <common/sessiond-comm/sessiond-comm.hpp> /* for struct lttng_filter_bytecode */
+#include <lttng/lttng.h>
+#include <lttng/trace-format-descriptor-internal.hpp>
int kernctl_create_session(int fd);
int kernctl_open_metadata(int fd, struct lttng_channel_attr *chops);
int kernctl_session_regenerate_statedump(int fd);
int kernctl_session_set_name(int fd, const char *name);
int kernctl_session_set_creation_time(int fd, time_t time);
+int kernctl_session_set_trace_format(int fd, const lttng::trace_format_descriptor& trace_format);
/* Buffer operations */
_IOW(0xF6, 0x5D, struct lttng_kernel_abi_session_name)
#define LTTNG_KERNEL_ABI_SESSION_SET_CREATION_TIME \
_IOW(0xF6, 0x5E, struct lttng_kernel_abi_session_creation_time)
+#define LTTNG_KERNEL_ABI_SESSION_SET_TRACE_FORMAT \
+ _IOW(0xF6, 0x5F, struct lttng_kernel_abi_session_trace_format)
/* Channel FD ioctl */
#define LTTNG_KERNEL_ABI_STREAM _IO(0xF6, 0x62)
int32_t id;
};
+enum lttng_kernel_abi_trace_format_type {
+ LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF1 = 0,
+ LTTNG_KERNEL_ABI_TRACE_FORMAT_CTF2 = 1,
+};
+
+struct lttng_kernel_abi_session_trace_format {
+ uint32_t type; /* enum lttng_kernel_abi_trace_format_type */
+} LTTNG_PACKED;
+
#endif /* _LTTNG_KERNEL_H */