Send ust and kernel domain directory handle to consumer
[lttng-tools.git] / src / bin / lttng-sessiond / kernel.c
index b79503b7d0185fd90b076c705f54ae6b90b8b3c2..93afc9d6fb25e795aab694bc77b9ace813c5aacb 100644 (file)
@@ -134,6 +134,26 @@ int kernel_create_session(struct ltt_session *session)
 
        DBG("Kernel session created (fd: %d)", lks->fd);
 
+       /*
+        * This is necessary since the creation time is present in the session
+        * name when it is generated.
+        */
+       if (session->has_auto_generated_name) {
+               ret = kernctl_session_set_name(lks->fd, DEFAULT_SESSION_NAME);
+       } else {
+               ret = kernctl_session_set_name(lks->fd, session->name);
+       }
+       if (ret) {
+               WARN("Could not set kernel session name for session %" PRIu64 " name: %s",
+                       session->id, session->name);
+       }
+
+       ret = kernctl_session_set_creation_time(lks->fd, session->creation_time);
+       if (ret) {
+               WARN("Could not set kernel session creation time for session %" PRIu64 " name: %s",
+                       session->id, session->name);
+       }
+
        return 0;
 
 error:
@@ -1269,6 +1289,7 @@ enum lttng_error_code kernel_snapshot_record(
        struct lttng_ht_iter iter;
        struct ltt_kernel_metadata *saved_metadata;
        char *trace_path = NULL;
+       size_t consumer_path_offset = 0;
 
        assert(ksess);
        assert(ksess->consumer);
@@ -1295,7 +1316,7 @@ enum lttng_error_code kernel_snapshot_record(
        }
 
        trace_path = setup_channel_trace_path(ksess->consumer,
-                       DEFAULT_KERNEL_TRACE_DIR);
+                       DEFAULT_KERNEL_TRACE_DIR, &consumer_path_offset);
        if (!trace_path) {
                status = LTTNG_ERR_INVALID;
                goto error;
@@ -1318,7 +1339,7 @@ enum lttng_error_code kernel_snapshot_record(
                cds_list_for_each_entry(chan, &ksess->channel_list.head, list) {
                        status = consumer_snapshot_channel(socket, chan->key, output, 0,
                                        ksess->uid, ksess->gid,
-                                       trace_path, wait,
+                                       &trace_path[consumer_path_offset], wait,
                                        nb_packets_per_stream);
                        if (status != LTTNG_OK) {
                                (void) kernel_consumer_destroy_metadata(socket,
@@ -1329,7 +1350,8 @@ enum lttng_error_code kernel_snapshot_record(
 
                /* Snapshot metadata, */
                status = consumer_snapshot_channel(socket, ksess->metadata->key, output,
-                               1, ksess->uid, ksess->gid, trace_path, wait, 0);
+                               1, ksess->uid, ksess->gid, &trace_path[consumer_path_offset],
+                               wait, 0);
                if (status != LTTNG_OK) {
                        goto error_consumer;
                }
@@ -1405,6 +1427,37 @@ error:
        return ret;
 }
 
+/*
+ * Check for the support of the packet sequence number via abi version number.
+ *
+ * Return 1 on success, 0 when feature is not supported, negative value in case
+ * of errors.
+ */
+int kernel_supports_ring_buffer_packet_sequence_number(void)
+{
+       int ret = 0; // Not supported by default
+       struct lttng_kernel_tracer_abi_version abi;
+
+       ret = kernctl_tracer_abi_version(kernel_tracer_fd, &abi);
+       if (ret < 0) {
+               ERR("Failed to retrieve lttng-modules ABI version");
+               goto error;
+       }
+
+       /*
+        * Packet sequence number was introduced in 2.8
+        */
+       if (abi.major >= 2 && abi.minor >= 8) {
+               /* Supported */
+               ret = 1;
+       } else {
+               /* Not supported */
+               ret = 0;
+       }
+error:
+       return ret;
+}
+
 /*
  * Rotate a kernel session.
  *
This page took 0.024285 seconds and 4 git commands to generate.