sessiond: return raw pointer to packet header
[lttng-tools.git] / src / bin / lttng-sessiond / ust-registry-session.cpp
index eced786e0446836f54ffbadf47a0607f5eb04775..03a87e2868f98d4f36848e0f2f45d9f3a88e41c4 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <fcntl.h>
 #include <functional>
+#include <initializer_list>
 #include <mutex>
 #include <sstream>
 #include <string>
@@ -240,17 +241,18 @@ lsu::registry_session::registry_session(const struct lst::abi& in_abi,
        lst::trace_class(in_abi, generate_uuid_or_throw()),
        _root_shm_path{root_shm_path ? root_shm_path : ""},
        _shm_path{shm_path ? shm_path : ""},
-       _metadata_path{_shm_path.size() > 0 ?
-                       fmt::format("{}/metadata", _shm_path) : std::string("")},
+       _metadata_path{_shm_path.size() > 0 ? fmt::format("{}/metadata", _shm_path) :
+                                                   std::string("")},
        _uid{euid},
        _gid{egid},
        _app_tracer_version{.major = major, .minor = minor},
        _tracing_id{tracing_id},
        _clock{lttng::make_unique<lsu::clock_class>()},
-       _metadata_generating_visitor{lttng::make_unique<ls::tsdl::trace_class_visitor>(abi,
-                       [this](const std::string& fragment) {
+       _metadata_generating_visitor{lttng::make_unique<ls::tsdl::trace_class_visitor>(
+                       abi, [this](const std::string& fragment) {
                                _append_metadata_fragment(fragment);
-                       })}
+                       })},
+       _packet_header{_create_packet_header()}
 {
        pthread_mutex_init(&_lock, NULL);
        if (_shm_path.size() > 0) {
@@ -286,6 +288,44 @@ lsu::registry_session::registry_session(const struct lst::abi& in_abi,
        }
 }
 
+lst::type::cuptr lsu::registry_session::_create_packet_header() const
+{
+       lst::structure_type::fields packet_header_fields;
+
+       /* uint32_t magic */
+       packet_header_fields.emplace_back(lttng::make_unique<lst::field>("magic",
+                       lttng::make_unique<lst::integer_type>(abi.uint32_t_alignment,
+                                       abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED,
+                                       lst::integer_type::base::HEXADECIMAL,
+                                       std::initializer_list<lst::integer_type::role>({lst::integer_type::role::PACKET_MAGIC_NUMBER}))));
+
+       /* uuid */
+       packet_header_fields.emplace_back(lttng::make_unique<lst::field>("uuid",
+                       lttng::make_unique<lst::static_length_blob_type>(0, 16,
+                                       std::initializer_list<lst::static_length_blob_type::role>({lst::static_length_blob_type::role::TRACE_CLASS_UUID}))));
+
+       /* uint32_t stream_id */
+       packet_header_fields.emplace_back(lttng::make_unique<lst::field>("stream_id",
+                       lttng::make_unique<lst::integer_type>(abi.uint32_t_alignment,
+                                       abi.byte_order, 32, lst::integer_type::signedness::UNSIGNED,
+                                       lst::integer_type::base::DECIMAL,
+                                       std::initializer_list<lst::integer_type::role>({lst::integer_type::role::DATA_STREAM_CLASS_ID}))));
+
+       /* uint64_t stream_instance_id */
+       packet_header_fields.emplace_back(lttng::make_unique<lst::field>("stream_instance_id",
+                       lttng::make_unique<lst::integer_type>(abi.uint64_t_alignment,
+                                       abi.byte_order, 64, lst::integer_type::signedness::UNSIGNED,
+                                       lst::integer_type::base::DECIMAL,
+                                       std::initializer_list<lst::integer_type::role>({lst::integer_type::role::DATA_STREAM_ID}))));
+
+       return lttng::make_unique<lst::structure_type>(0, std::move(packet_header_fields));
+}
+
+const lst::type *lsu::registry_session::get_packet_header() const noexcept
+{
+       return _packet_header.get();
+}
+
 /*
  * For a given enumeration in a registry, delete the entry and destroy
  * the enumeration.
@@ -390,7 +430,7 @@ void lsu::registry_session::add_channel(uint64_t key)
        }
 
        auto chan = new lsu::registry_channel(
-                       _get_next_channel_id(),
+                       _get_next_channel_id(), abi, _clock->name,
                        /* Registered channel listener. */
                        [this](const lsu::registry_channel& registered_channel) {
                                /*
This page took 0.024474 seconds and 4 git commands to generate.