holoscan::FastDdsTransport

Beta
View as Markdown

DDS-based implementation of PubSubTransport.

Uses FastDDS DataWriter/DataReader for message transport.

#include <holoscan/fastdds_transport.hpp>

Inherits from: nvidia::gxf::PubSubTransport (public)


Constructors

FastDdsTransport

Construct a FastDdsTransport with a FastDdsPubSubContext.

Parameters

context
FastDdsPubSubContext *

FastDdsPubSubContext providing DomainParticipant

Destructor

~FastDdsTransport

holoscan::FastDdsTransport::~FastDdsTransport() override

Destructor - calls shutdown() if needed.


Assignment operators

operator=

FastDdsTransport & holoscan::FastDdsTransport::operator=(
const FastDdsTransport &
) = delete

Methods

initialize

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::initialize() override

shutdown

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::shutdown() override

is_initialized

bool holoscan::FastDdsTransport::is_initialized() const override

transport_model

nvidia::gxf::TransportModel holoscan::FastDdsTransport::transport_model() const override

DDS is a topic-based transport.

PubSubContext uses this to call send(topic_name, …) once per publish instead of calling send(gid, …) once per subscriber.

native_topic_matching

bool holoscan::FastDdsTransport::native_topic_matching() const override

SEDP handles topic matching + QoS compatibility at the RTPS protocol level.

native_qos_enforcement

bool holoscan::FastDdsTransport::native_qos_enforcement() const override

RTPS-level reliability, durability, and deadline enforcement.

supports_multicast

bool holoscan::FastDdsTransport::supports_multicast() const override

RTPS supports multicast for discovery and data.

requires_explicit_connections

bool holoscan::FastDdsTransport::requires_explicit_connections() const override

DDS DataWriters/DataReaders manage connections internally.

supports_native_buffers

bool holoscan::FastDdsTransport::supports_native_buffers() const override

supports_mixed_local_remote_fanout

bool holoscan::FastDdsTransport::supports_mixed_local_remote_fanout() const override

supports_native_profile

bool holoscan::FastDdsTransport::supports_native_profile(
const std::string &profile
) const override

send_native_descriptor

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::send_native_descriptor(
const std::string &topic_name,
const nvidia::gxf::NativeDescriptorPayload &descriptor,
const nvidia::gxf::MessageMetadata &metadata
) override

Send a native descriptor on the sidecar topic “{topic}/_native_desc”.

set_native_buffers_enabled

void holoscan::FastDdsTransport::set_native_buffers_enabled(
bool enabled
)

Enable native buffer support (called by FastDdsPubSubNetworkContext).

connect_to

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::connect_to(
const nvidia::gxf::EndpointInfo &remote_endpoint
) override

No-op for DDS - discovery is automatic via SPDP/SEDP.

disconnect_from

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::disconnect_from(
const nvidia::gxf::Gid &remote_gid
) override

No-op for DDS - endpoint lifecycle managed by DDS.

is_connected_to

bool holoscan::FastDdsTransport::is_connected_to(
const nvidia::gxf::Gid &remote_gid
) const override

Returns true for any endpoint (DDS handles discovery).

create_publisher_endpoint

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::create_publisher_endpoint(
const std::string &topic_name,
const nvidia::gxf::Gid &publisher_gid,
const nvidia::gxf::QoSProfile &qos = nvidia::gxf::QoSProfile{}
) override

Create a DataWriter for a topic.

Called automatically by PubSubContext::register_publisher(). Maps the QoSProfile to FastDDS DataWriterQos via dds_qos::apply_writer_qos().

Returns: Success or error if topic/writer creation fails.

Parameters

topic_name
const std::string &

Name of the topic to publish to.

publisher_gid
const nvidia::gxf::Gid &

GID to associate with this writer.

qos
const nvidia::gxf::QoSProfile &Defaults to nvidia::gxf::QoSProfile{}

QoS profile to apply to the DataWriter.

create_subscriber_endpoint

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::create_subscriber_endpoint(
const std::string &topic_name,
const nvidia::gxf::Gid &subscriber_gid,
const nvidia::gxf::QoSProfile &qos = nvidia::gxf::QoSProfile{}
) override

Create a DataReader for a topic.

Called automatically by PubSubContext::register_subscriber(). Maps the QoSProfile to FastDDS DataReaderQos via dds_qos::apply_reader_qos().

Returns: Success or error if topic/reader creation fails.

Parameters

topic_name
const std::string &

Name of the topic to subscribe to.

subscriber_gid
const nvidia::gxf::Gid &

GID to associate with this reader.

qos
const nvidia::gxf::QoSProfile &Defaults to nvidia::gxf::QoSProfile{}

QoS profile to apply to the DataReader.

remove_publisher_endpoint

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::remove_publisher_endpoint(
const nvidia::gxf::Gid &publisher_gid
) override

Remove a DataWriter.

Called automatically by PubSubContext::unregister_publisher() and PubSubContext::deinitialize(). For reliable QoS, calls wait_for_acknowledgments() before deletion.

Returns: Success or error if writer not found.

Parameters

publisher_gid
const nvidia::gxf::Gid &

GID of the writer to remove.

remove_subscriber_endpoint

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::remove_subscriber_endpoint(
const nvidia::gxf::Gid &subscriber_gid
) override

Remove a DataReader.

Called automatically by PubSubContext::unregister_subscriber() and PubSubContext::deinitialize().

Returns: Success or error if reader not found.

Parameters

subscriber_gid
const nvidia::gxf::Gid &

GID of the reader to remove.

send

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::send(
const nvidia::gxf::Gid &destination_gid,
const std::vector<uint8_t> &payload,
const nvidia::gxf::MessageMetadata &metadata
) override

Send payload via DDS DataWriter (GID-based fallback).

This is the GID-based send required by the PubSubTransport interface. For kTopicBased transports, PubSubContext calls the topic-based send() overload instead, so this is a fallback only.

Returns: Success or error if no writer exists for the publisher.

Parameters

destination_gid
const nvidia::gxf::Gid &

IGNORED - DDS publishes to topic, not endpoint.

payload
const std::vector<uint8_t> &

Serialized message (already staged to host memory).

metadata
const nvidia::gxf::MessageMetadata &

Must contain publisher_gid identifying the writer.

set_on_receive

void holoscan::FastDdsTransport::set_on_receive(
ReceiveCallback callback
) override

set_on_connection_established

void holoscan::FastDdsTransport::set_on_connection_established(
ConnectionEstablishedCallback callback
) override

set_on_connection_lost

void holoscan::FastDdsTransport::set_on_connection_lost(
ConnectionLostCallback callback
) override

get_send_queue_size

size_t holoscan::FastDdsTransport::get_send_queue_size() const override

get_receive_queue_size

size_t holoscan::FastDdsTransport::get_receive_queue_size() const override

get_connection_count

size_t holoscan::FastDdsTransport::get_connection_count() const override

get_or_create_topic

eprosima::fastdds::dds::Topic * holoscan::FastDdsTransport::get_or_create_topic(
const std::string &topic_name
)

Get or create a DDS Topic.

get_or_create_sidecar_writer

eprosima::fastdds::dds::DataWriter * holoscan::FastDdsTransport::get_or_create_sidecar_writer(
const std::string &topic_name
)

Get or create a sidecar DataWriter for native descriptor messages.

create_sidecar_reader

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::create_sidecar_reader(
const std::string &topic_name,
const nvidia::gxf::Gid &subscriber_gid
)

Create a sidecar DataReader for native descriptor messages.

send_impl

nvidia::gxf::Expected<void> holoscan::FastDdsTransport::send_impl(
const std::string &topic_name,
const std::vector<uint8_t> &payload,
const nvidia::gxf::MessageMetadata &metadata
)

Shared send implementation used by both GID-based and topic-based send().

enqueue_sidecar_receive

void holoscan::FastDdsTransport::enqueue_sidecar_receive(
nvidia::gxf::Gid publisher_gid,
std::vector<uint8_t> &&payload,
nvidia::gxf::MessageMetadata metadata
)

Member variables

NameTypeDescription
context_FastDdsPubSubContext *
initialized_bool
registered_type_name_std::string
type_registered_bool
publisher_eprosima::fastdds::dds::Publisher *
subscriber_eprosima::fastdds::dds::Subscriber *
writers_std::unordered_map< nvidia::gxf::Gid, WriterInfo >
readers_std::unordered_map< nvidia::gxf::Gid, ReaderInfo >
topics_std::unordered_map< std::string, eprosima::fastdds::dds::Topic * >
endpoints_mutex_std::mutex
callback_mutex_std::mutex
receive_callback_ReceiveCallback
connection_established_callback_ConnectionEstablishedCallback
connection_lost_callback_ConnectionLostCallback
reader_listener_std::unique_ptr< ReaderListener >
writer_listener_std::unique_ptr< WriterListener >
type_support_eprosima::fastdds::dds::TypeSupport
native_buffers_enabled_bool
sidecar_writers_std::unordered_map< std::string, SidecarWriterInfo >
sidecar_readers_std::unordered_map< std::string, SidecarReaderInfo >
sidecar_reader_listener_std::unique_ptr< SidecarReaderListener >
sidecar_dispatch_queue_std::unique_ptr< SidecarDispatchQueue >

Inner classes

WriterInfo

struct holoscan::FastDdsTransport::WriterInfo
NameTypeDescription
writereprosima::fastdds::dds::DataWriter *
topiceprosima::fastdds::dds::Topic *
topic_namestd::string

ReaderInfo

struct holoscan::FastDdsTransport::ReaderInfo
NameTypeDescription
readereprosima::fastdds::dds::DataReader *
topiceprosima::fastdds::dds::Topic *
topic_namestd::string
subscriber_gidnvidia::gxf::Gid

SidecarWriterInfo

struct holoscan::FastDdsTransport::SidecarWriterInfo
NameTypeDescription
writereprosima::fastdds::dds::DataWriter *
topiceprosima::fastdds::dds::Topic *

SidecarReaderInfo

struct holoscan::FastDdsTransport::SidecarReaderInfo
NameTypeDescription
readereprosima::fastdds::dds::DataReader *
topiceprosima::fastdds::dds::Topic *