Skip to main content

QoS Translation Matrix

Reference for translating QoS policies between HDDS and other DDS implementations.

Reliability

HDDSFastDDSCycloneDDSRTI Connext
QoS::best_effort()BEST_EFFORT_RELIABILITY_QOSDDS_RELIABILITY_BEST_EFFORTDDS_BEST_EFFORT_RELIABILITY_QOS
QoS::reliable()RELIABLE_RELIABILITY_QOSDDS_RELIABILITY_RELIABLEDDS_RELIABLE_RELIABILITY_QOS

Configuration Examples

HDDS:

use hdds::QoS;

let qos = QoS::reliable();

FastDDS (XML):

<reliability>
<kind>RELIABLE_RELIABILITY_QOS</kind>
<max_blocking_time><sec>0</sec><nanosec>100000000</nanosec></max_blocking_time>
</reliability>

CycloneDDS (XML):

<Reliability><Kind>reliable</Kind><MaxBlockingTime>100ms</MaxBlockingTime></Reliability>

RTI Connext:

<reliability><kind>RELIABLE_RELIABILITY_QOS</kind>
<max_blocking_time><sec>0</sec><nanosec>100000000</nanosec></max_blocking_time>
</reliability>

Durability

HDDSFastDDSCycloneDDSRTI Connext
volatile()VOLATILE_DURABILITY_QOSvolatileDDS_VOLATILE_DURABILITY_QOS
transient_local()TRANSIENT_LOCAL_DURABILITY_QOStransient_localDDS_TRANSIENT_LOCAL_DURABILITY_QOS
transient()TRANSIENT_DURABILITY_QOStransientDDS_TRANSIENT_DURABILITY_QOS
persistent()PERSISTENT_DURABILITY_QOSpersistentDDS_PERSISTENT_DURABILITY_QOS

History

HDDSFastDDSCycloneDDSRTI Connext
.keep_last(N)KEEP_LAST_HISTORY_QOS, depth=Nkeep_last, depth=NDDS_KEEP_LAST_HISTORY_QOS
.keep_all()KEEP_ALL_HISTORY_QOSkeep_allDDS_KEEP_ALL_HISTORY_QOS

Configuration Examples

HDDS:

use hdds::QoS;

let qos = QoS::reliable().keep_last(10);

FastDDS:

<history><kind>KEEP_LAST_HISTORY_QOS</kind><depth>10</depth></history>

CycloneDDS:

<History><Kind>keep_last</Kind><Depth>10</Depth></History>

RTI Connext:

<history><kind>KEEP_LAST_HISTORY_QOS</kind><depth>10</depth></history>

Deadline

HDDSFastDDSCycloneDDSRTI Connext
.deadline(Duration)<period><sec/><nanosec/></period><Deadline>Nms</Deadline><period><sec/><nanosec/></period>

Configuration Examples

HDDS:

use hdds::QoS;
use std::time::Duration;

let qos = QoS::reliable().deadline(Duration::from_millis(100));

FastDDS:

<deadline><period><sec>0</sec><nanosec>100000000</nanosec></period></deadline>

CycloneDDS:

<Deadline>100ms</Deadline>

RTI Connext:

<deadline><period><sec>0</sec><nanosec>100000000</nanosec></period></deadline>

Liveliness

HDDSFastDDSCycloneDDSRTI Connext
liveliness_automatic()AUTOMATIC_LIVELINESS_QOSautomaticDDS_AUTOMATIC_LIVELINESS_QOS
liveliness_manual_by_participant()MANUAL_BY_PARTICIPANT_LIVELINESS_QOSmanual_by_participantDDS_MANUAL_BY_PARTICIPANT_LIVELINESS_QOS
liveliness_manual_by_topic()MANUAL_BY_TOPIC_LIVELINESS_QOSmanual_by_topicDDS_MANUAL_BY_TOPIC_LIVELINESS_QOS

Ownership

HDDSFastDDSCycloneDDSRTI Connext
ownership_shared()SHARED_OWNERSHIP_QOSsharedDDS_SHARED_OWNERSHIP_QOS
ownership_exclusive(N)EXCLUSIVE_OWNERSHIP_QOSexclusiveDDS_EXCLUSIVE_OWNERSHIP_QOS

Presentation

HDDSFastDDSCycloneDDSRTI Connext
presentation_instance()INSTANCE_PRESENTATION_QOSinstanceDDS_INSTANCE_PRESENTATION_QOS
presentation_topic()TOPIC_PRESENTATION_QOStopicDDS_TOPIC_PRESENTATION_QOS
presentation_group()GROUP_PRESENTATION_QOSgroupDDS_GROUP_PRESENTATION_QOS

Destination Order

HDDSFastDDSCycloneDDSRTI Connext
destination_order_by_reception()BY_RECEPTION_TIMESTAMPby_reception_timestampDDS_BY_RECEPTION_TIMESTAMP
destination_order_by_source()BY_SOURCE_TIMESTAMPby_source_timestampDDS_BY_SOURCE_TIMESTAMP

Resource Limits

HDDSFastDDSCycloneDDSRTI Connext
max_samples(N)max_samplesMaxSamplesmax_samples
max_instances(N)max_instancesMaxInstancesmax_instances
max_samples_per_instance(N)max_samples_per_instanceMaxSamplesPerInstancemax_samples_per_instance

Configuration Examples

HDDS:

use hdds::QoS;

let qos = QoS::reliable()
.max_samples(1000)
.max_instances(100)
.max_samples_per_instance(10);

FastDDS:

<resource_limits>
<max_samples>1000</max_samples>
<max_instances>100</max_instances>
<max_samples_per_instance>10</max_samples_per_instance>
</resource_limits>

CycloneDDS:

<ResourceLimits>
<MaxSamples>1000</MaxSamples>
<MaxInstances>100</MaxInstances>
<MaxSamplesPerInstance>10</MaxSamplesPerInstance>
</ResourceLimits>

Partition

HDDSFastDDSCycloneDDSRTI Connext
partition(&["a", "b"])<name>a</name><name>b</name>Partition("a,b")<name>a</name><name>b</name>

Time-Based Filter

HDDSFastDDSCycloneDDSRTI Connext
time_based_filter(Duration)minimum_separationMinimumSeparationminimum_separation

Transport Priority

HDDSFastDDSCycloneDDSRTI Connext
transport_priority(N)<value>N</value>N/A<value>N</value>

Compatibility Rules

Matching Requirements

QoS PolicyRequirement for Match
ReliabilityWriter ≥ Reader
DurabilityWriter ≥ Reader
DeadlineWriter period ≤ Reader period
OwnershipWriter = Reader
LivelinessWriter kind ≥ Reader kind
PresentationAccess scope compatible
PartitionAt least one overlap

Default Values Comparison

PolicyHDDS DefaultFastDDS DefaultCycloneDDS DefaultRTI Default
ReliabilityBestEffortBestEffortBestEffortBestEffort
DurabilityVolatileVolatileVolatileVolatile
HistoryKeepLast(1)KeepLast(1)KeepLast(1)KeepLast(1)
DeadlineInfiniteInfiniteInfiniteInfinite
LivelinessAutomaticAutomaticAutomaticAutomatic

Wire Compatibility Notes

All DDS implementations use the same RTPS wire protocol, so QoS policies are communicated during discovery. However:

  1. Vendor extensions: Some vendors have proprietary QoS extensions not compatible with others
  2. Defaults may differ: Explicit configuration recommended for interoperability
  3. Type consistency: XTypes support varies; use @appendable for safety

Next Steps