+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;
+}