QoS Translation Matrix
Reference for translating QoS policies between HDDS and other DDS implementations.
Reliability
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
Reliability::BestEffort | BEST_EFFORT_RELIABILITY_QOS | DDS_RELIABILITY_BEST_EFFORT | DDS_BEST_EFFORT_RELIABILITY_QOS |
Reliability::Reliable | RELIABLE_RELIABILITY_QOS | DDS_RELIABILITY_RELIABLE | DDS_RELIABLE_RELIABILITY_QOS |
Configuration Examples
HDDS:
DataWriterQos::default()
.reliability(Reliability::Reliable {
max_blocking_time: Duration::from_millis(100),
})
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
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
Durability::Volatile | VOLATILE_DURABILITY_QOS | volatile | DDS_VOLATILE_DURABILITY_QOS |
Durability::TransientLocal | TRANSIENT_LOCAL_DURABILITY_QOS | transient_local | DDS_TRANSIENT_LOCAL_DURABILITY_QOS |
Durability::Transient | TRANSIENT_DURABILITY_QOS | transient | DDS_TRANSIENT_DURABILITY_QOS |
Durability::Persistent | PERSISTENT_DURABILITY_QOS | persistent | DDS_PERSISTENT_DURABILITY_QOS |
History
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
History::KeepLast { depth: N } | KEEP_LAST_HISTORY_QOS, depth=N | keep_last, depth=N | DDS_KEEP_LAST_HISTORY_QOS |
History::KeepAll | KEEP_ALL_HISTORY_QOS | keep_all | DDS_KEEP_ALL_HISTORY_QOS |
Configuration Examples
HDDS:
DataWriterQos::default().history(History::KeepLast { depth: 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
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
Deadline::from_millis(N) | <period><sec/><nanosec/></period> | <Deadline>Nms</Deadline> | <period><sec/><nanosec/></period> |
Configuration Examples
HDDS:
DataWriterQos::default().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
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
Liveliness::Automatic | AUTOMATIC_LIVELINESS_QOS | automatic | DDS_AUTOMATIC_LIVELINESS_QOS |
Liveliness::ManualByParticipant | MANUAL_BY_PARTICIPANT_LIVELINESS_QOS | manual_by_participant | DDS_MANUAL_BY_PARTICIPANT_LIVELINESS_QOS |
Liveliness::ManualByTopic | MANUAL_BY_TOPIC_LIVELINESS_QOS | manual_by_topic | DDS_MANUAL_BY_TOPIC_LIVELINESS_QOS |
Ownership
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
Ownership::Shared | SHARED_OWNERSHIP_QOS | shared | DDS_SHARED_OWNERSHIP_QOS |
Ownership::Exclusive | EXCLUSIVE_OWNERSHIP_QOS | exclusive | DDS_EXCLUSIVE_OWNERSHIP_QOS |
Presentation
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
Presentation::Instance | INSTANCE_PRESENTATION_QOS | instance | DDS_INSTANCE_PRESENTATION_QOS |
Presentation::Topic | TOPIC_PRESENTATION_QOS | topic | DDS_TOPIC_PRESENTATION_QOS |
Presentation::Group | GROUP_PRESENTATION_QOS | group | DDS_GROUP_PRESENTATION_QOS |
Destination Order
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
DestinationOrder::ByReception | BY_RECEPTION_TIMESTAMP | by_reception_timestamp | DDS_BY_RECEPTION_TIMESTAMP |
DestinationOrder::BySource | BY_SOURCE_TIMESTAMP | by_source_timestamp | DDS_BY_SOURCE_TIMESTAMP |
Resource Limits
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
max_samples | max_samples | MaxSamples | max_samples |
max_instances | max_instances | MaxInstances | max_instances |
max_samples_per_instance | max_samples_per_instance | MaxSamplesPerInstance | max_samples_per_instance |
Configuration Examples
HDDS:
DataReaderQos::default()
.resource_limits(ResourceLimits {
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
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
Partition::new(["a", "b"]) | <name>a</name><name>b</name> | Partition("a,b") | <name>a</name><name>b</name> |
Time-Based Filter
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
TimeBasedFilter::from_millis(N) | minimum_separation | MinimumSeparation | minimum_separation |
Transport Priority
| HDDS | FastDDS | CycloneDDS | RTI Connext |
|---|---|---|---|
TransportPriority::new(N) | <value>N</value> | N/A | <value>N</value> |
Compatibility Rules
Matching Requirements
| QoS Policy | Requirement for Match |
|---|---|
| Reliability | Writer ≥ Reader |
| Durability | Writer ≥ Reader |
| Deadline | Writer period ≤ Reader period |
| Ownership | Writer = Reader |
| Liveliness | Writer kind ≥ Reader kind |
| Presentation | Access scope compatible |
| Partition | At least one overlap |
Default Values Comparison
| Policy | HDDS Default | FastDDS Default | CycloneDDS Default | RTI Default |
|---|---|---|---|---|
| Reliability | BestEffort | BestEffort | BestEffort | BestEffort |
| Durability | Volatile | Volatile | Volatile | Volatile |
| History | KeepLast(1) | KeepLast(1) | KeepLast(1) | KeepLast(1) |
| Deadline | Infinite | Infinite | Infinite | Infinite |
| Liveliness | Automatic | Automatic | Automatic | Automatic |
Wire Compatibility Notes
All DDS implementations use the same RTPS wire protocol, so QoS policies are communicated during discovery. However:
- Vendor extensions: Some vendors have proprietary QoS extensions not compatible with others
- Defaults may differ: Explicit configuration recommended for interoperability
- Type consistency: XTypes support varies; use
@appendablefor safety
Next Steps
- FastDDS QoS Mapping - FastDDS details
- CycloneDDS QoS Mapping - CycloneDDS details
- RTI Connext QoS Mapping - RTI details