Interoperability Guide
One of DDS's greatest strengths is interoperability. HDDS can communicate with other DDS implementations out of the box, thanks to the standardized RTPS wire protocol.
Verified Interoperability (9/9 Scenarios)
HDDS has been tested and verified to interoperate with all major DDS implementations:
| Implementation | Version | Direction | Samples | Status |
|---|---|---|---|---|
| FastDDS | 3.1.x | FastDDS → HDDS | 583 | ✅ |
| FastDDS | 3.1.x | HDDS → FastDDS | 435/448 (97%) | ✅ |
| RTI Connext | 6.1.0 | RTI → HDDS | 57 | ✅ |
| RTI Connext | 6.1.0 | HDDS → RTI | 90/90 (100%) | ✅ |
| RTI Connext | 7.3.0 | RTI → HDDS | 49/50 (98%) | ✅ |
| CycloneDDS | 0.10.x | Cyclone → HDDS | 50/50 | ✅ |
| CycloneDDS | 0.10.x | HDDS → Cyclone | 50/50 | ✅ |
| OpenDDS | 3.28.x | OpenDDS → HDDS | 20/20 (100%) | ✅ |
| HDDS | latest | HDDS → HDDS | 50/50 | ✅ |
RTPS Protocol Versions
| Implementation | RTPS Version | Vendor ID |
|---|---|---|
| HDDS | 2.3 (*) | 0x01aa |
| FastDDS | 2.3 | 0x010f |
| RTI Connext 6.x | 2.3 | 0x0101 |
| RTI Connext 7.x | 2.5 | 0x0101 |
| CycloneDDS | 2.3 | 0x0110 |
| OpenDDS | 2.3 | 0x0103 |
(*) The "RTPS Version" column shows the wire protocol version advertised in RTPS headers. HDDS advertises 2.3 for maximum compatibility but implements the full RTPS 2.5 specification (as shown in the README badge). RTI Connext 7.3.0 advertises 2.5, which HDDS handles automatically.
Key Features Validated
| Feature | Tests | Status |
|---|---|---|
| SPDP Discovery | 9/9 vendors | ✅ |
| SEDP Discovery | 9/9 vendors | ✅ |
| Reliable communication | All scenarios | ✅ |
| Best-Effort communication | All scenarios | ✅ |
| XCDR1 serialization | FastDDS, RTI, Cyclone | ✅ |
| XCDR2 serialization | All vendors | ✅ |
| Multi-node cluster | Cross-machine | ✅ |
| 96 QoS policy combinations | Validator suite | ✅ |
How Interoperability Works
All compliant DDS implementations use the RTPS (Real-Time Publish Subscribe) protocol for communication. This means:
- Automatic Discovery - Participants find each other via SPDP multicast
- Wire Compatibility - Data is serialized using CDR2 format
- QoS Negotiation - Compatible QoS policies are matched automatically
Quick Start
To communicate between HDDS and another DDS implementation:
- Use the same Domain ID (e.g., domain 0)
- Use the same Topic name (e.g., "sensor/temperature")
- Use compatible data types (same structure, generated from same IDL)
- Use compatible QoS (e.g., both RELIABLE or both BEST_EFFORT)
Example: HDDS Publisher → FastDDS Subscriber
HDDS Publisher (Rust):
// Types are generated from IDL using hddsgen (see Generate Types section)
let participant = Participant::builder("hdds_publisher")
.domain_id(0)
.with_transport(TransportMode::UdpMulticast)
.build()?;
let topic = participant.topic::<Temperature>("sensor/temp")?;
let writer = topic.writer().qos(QoS::reliable()).build()?;
writer.write(&Temperature { sensor_id: "s1".into(), value: 23.5 })?;
FastDDS Subscriber (C++):
// Minimal snippet — see full working example in /interop/fastdds/example
auto participant = DomainParticipantFactory::get_instance()->create_participant(0, ...);
auto topic = participant->create_topic("sensor/temp", "Temperature", ...);
auto reader = subscriber->create_datareader(topic, ...);
// Will receive data from HDDS publisher
Verify Interop in 5 Minutes
Already have FastDDS installed? Test cross-vendor communication:
# Terminal 1: HDDS subscriber (from sdk samples)
cd hdds/sdk/samples/01_basics/rust
cargo run --bin hello_world
# Terminal 2: FastDDS publisher (from FastDDS examples)
cd FastDDS/examples/cpp/hello_world
./hello_world publisher
Cross-vendor interop requires both sides to use types generated from the same IDL file. CDR is a positional format -- field names, types, and order must match exactly.
For a complete working setup with shared IDL, see the FastDDS example.
Detailed Guides
- FastDDS Interop - Step-by-step FastDDS setup
- RTI Connext Interop - RTI configuration
- CycloneDDS Interop - Eclipse CycloneDDS setup
- QoS Translation Matrix - QoS mapping between vendors
Common Issues
Type Mismatch
Ensure both sides use the same IDL definition:
// Both HDDS and FastDDS should use this exact IDL
struct Temperature {
@key string sensor_id;
float value;
};
QoS Incompatibility
QoS policies must be compatible for matching:
| Writer QoS | Reader QoS | Result |
|---|---|---|
| RELIABLE | RELIABLE | Match |
| RELIABLE | BEST_EFFORT | Match |
| BEST_EFFORT | RELIABLE | No Match |
| BEST_EFFORT | BEST_EFFORT | Match |
Discovery Issues
If participants don't discover each other:
- Check firewall settings (ports 7400-7500)
- Verify multicast is enabled
- Check domain IDs match
- Use hdds_viewer to debug traffic