DDS Conformance Matrix
Cross-vendor RTPS/DDS compliance matrix for HDDS 1.0.8, validated on the skylab cluster (nodes 4/5/6).
Methodology
Three confidence levels for each result:
- (tested) -- validated by live interop test between HDDS and the vendor (bidirectional pub/sub, 50/50 samples)
- (doc-based) -- based on the vendor's official documentation, not independently verified
- (untested) -- no data available
Vendors Tested
| Vendor | Version | RTPS | Priority |
|---|---|---|---|
| HDDS | 1.0.8 | 2.4 | -- |
| FastDDS (eProsima) | 3.1.x | 2.5 | P1 |
| RTI Connext | 6.1.0 | 2.3 | P1 |
| RTI Connext | 7.3.0 | 2.5 | P1 |
| CycloneDDS (Eclipse) | 0.10.x | 2.5 | P1 |
| OpenDDS (OCI) | 3.28.x | 2.5 | P2 |
Interoperability Results
9/9 scenarios PASS across all vendors. Bidirectional pub/sub with 50/50 samples confirmed for each pair.
remarque
RTI 7.3.0 showed 1/50 sample lost in one test due to discovery timing (not a protocol issue). Documented as HDDS-DIV-001.
RTPS Protocol Conformance (RTPS 2.5 Part 8.5)
| Feature | Spec Ref | HDDS | FastDDS | RTI 6.1 | RTI 7.3 | CycloneDDS | OpenDDS |
|---|---|---|---|---|---|---|---|
| SPDP (Simple Participant Discovery) | 8.5.3 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| SEDP (Simple Endpoint Discovery) | 8.5.4 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| DATA Submessage | 8.3.7.2 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| HEARTBEAT Submessage | 8.3.7.5 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| ACKNACK Submessage | 8.3.7.1 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| GAP Submessage | 8.3.7.4 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| DATA_FRAG Submessage | 8.3.7.3 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | N/A (untested) |
Serialization Conformance
| Encoding | Spec Ref | HDDS | FastDDS | RTI 6.1 | RTI 7.3 | CycloneDDS | OpenDDS |
|---|---|---|---|---|---|---|---|
| CDR_LE | XTypes 1.3 s7.4.1 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| PL_CDR_LE | XTypes 1.3 s7.4.2 | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| CDR2_LE | XTypes 1.3 s7.4.3 | PASS (tested) | PASS (tested) | N/A | PASS (tested) | PASS (tested) | PASS (doc-based) |
| PL_CDR2_LE | XTypes 1.3 s7.4.3 | PASS (tested) | PASS (tested) | N/A | PASS (tested) | PASS (tested) | PASS (doc-based) |
QoS Conformance
12 QoS policies validated across 96 combinations, all PASS (tested):
- Reliability (BestEffort, Reliable)
- Durability (Volatile, TransientLocal)
- History (KeepLast 1/10/100, KeepAll)
- Deadline, Liveliness, Lifespan
- LatencyBudget, TimeBasedFilter
- TransportPriority, ResourceLimits
- Ownership, Partition
Transport Conformance
| Transport | HDDS | FastDDS | RTI | CycloneDDS | OpenDDS |
|---|---|---|---|---|---|
| UDP Multicast | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| UDP Unicast | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) | PASS (tested) |
| TCP | PASS (tested) | untested | untested | untested | untested |
| Shared Memory | PASS (tested) | untested | untested | untested | untested |
HDDS Divergences
| ID | Description | Justification | Status |
|---|---|---|---|
| HDDS-DIV-001 | RTI 7.3.0: 1/50 sample lost on first discovery | RTI discovery timing requires longer initial wait; not a protocol bug | Documented |
| HDDS-DIV-002 | OpenDDS: DATA_FRAG submessage not tested | OpenDDS test environment did not trigger fragmentation; needs large payload test | Documented |
| HDDS-DIV-003 | RTI 6.x: CDR2/PL_CDR2 not available | RTI 6.1.0 predates XTypes 1.3 CDR2 support; expected behavior | Documented |
Codegen Conformance
The HDDS code generator (hdds_gen) has been audited against the OMG IDL 4.2 specification. Key fixes applied:
| Audit ID | Feature | Status |
|---|---|---|
| AUDIT-001 | @autoid(HASH) FNV-1a member ID hashing | Fixed (was MD5, now spec-compliant FNV-1a) |
| AUDIT-004 | @nested prevents DDS trait derivation | Fixed |
| AUDIT-007 | @non_serialized field skip in CDR encode/decode | Fixed |
| AUDIT-002 | @must_understand in EMHEADER1 | WIP |
| AUDIT-003 | @default_literal union default case | WIP |
| AUDIT-005 | @data_representation XCDR1 vs XCDR2 | WIP |
| AUDIT-006 | @external reference by indirection | WIP |
| AUDIT-008 | @verbatim code injection | WIP (P3) |
Full details: docs/CODEGEN_CONFORMANCE.md
Reproduction
To reproduce interop tests yourself:
# Clone and build HDDS
git clone https://git.hdds.io/hdds/hdds.git
cd hdds
# Run interop tests (requires target vendor running)
cargo test --package hdds_test -- interop
Test infrastructure details are in the hdds_test repository.