Skip to main content

RTPS Wire Compatibility

HDDS implements the RTPS 2.4 wire protocol for interoperability with all compliant DDS implementations.

Protocol Version

PropertyValue
RTPS Version2.4
MagicRTPS (0x52, 0x54, 0x50, 0x53)
Vendor ID0x01AA (HDDS)

Encapsulation Formats

HDDS supports multiple CDR encapsulation formats:

FormatIDDescriptionPrimary Use
CDR_BE0x0000Big-endian CDR v1Legacy
CDR_LE0x0001Little-endian CDR v1Legacy
PL_CDR_BE0x0002Parameter list big-endianRTI Connext
PL_CDR_LE0x0003Parameter list little-endianHDDS default
CDR2_LE0x000ACDR2 little-endianModern types
DL_CDR2_LE0x000ADelimited CDR2FastDDS
PL_CDR2_LE0x0013Parameter list CDR2XTypes

Submessage Support

All standard RTPS submessages are implemented:

SubmessageIDStatus
DATA0x15✅ Full support
DATA_FRAG0x16✅ Full support
ACKNACK0x06✅ Full support
HEARTBEAT0x07✅ Full support
GAP0x08✅ Full support
INFO_TS0x09✅ Full support
INFO_DST0x0E✅ Full support

Built-in Endpoints

EndpointReader IDWriter ID
SPDP Participant0x000100C70x000100C2
SEDP Publications0x000003C70x000003C2
SEDP Subscriptions0x000004C70x000004C2
P2P Messages0x000200C70x000200C2
TypeLookup0x000300C30x000300C4

Vendor Compatibility Matrix

VendorDiscoveryData ExchangeXTypes
RTI Connext 6.x
eProsima FastDDS 2.x
Eclipse Cyclone DDS🔄 Planned
OCI OpenDDS🔄 Planned

Discovery Protocol

SPDP (Simple Participant Discovery)

HDDS announces participants via multicast:

  • Multicast group: 239.255.0.1
  • Port formula: 7400 + (250 × domainId)
  • Announcement period: 3 seconds (200ms during startup)
  • Lease duration: 30 seconds (default)

SEDP (Simple Endpoint Discovery)

Endpoints are announced via unicast after participant discovery:

  • Publications (DataWriters)
  • Subscriptions (DataReaders)
  • Topic types (via TypeLookup service)

QoS Wire Mapping

QoS policies are encoded in discovery announcements:

QoS PolicyParameter ID
Reliability0x001A
Durability0x001D
History0x0040
Deadline0x0023
Liveliness0x001B
Ownership0x001F
Partition0x0029

Packet Structure

+------------------+
| RTPS Header | 20 bytes
| - Magic (4) |
| - Version (2) |
| - Vendor ID (2) |
| - GUID Prefix(12)|
+------------------+
| Submessage 1 |
| - Header (4) |
| - Payload (var) |
+------------------+
| Submessage 2 |
| ... |
+------------------+

Endianness

  • RTPS header: Always big-endian
  • Submessage header: Endianness flag in header
  • Payload: Follows submessage endianness
  • HDDS default: Little-endian (x86/ARM optimized)

Fragmentation

Large messages (>64KB) are automatically fragmented:

PropertyValue
Max UDP datagram65,507 bytes
Default fragment size64 KB
Max CDR payload16 MB

Interoperability Tips

Working with RTI Connext

RTI Connext uses big-endian parameter lists (PL_CDR_BE):

# Enable interop diagnostics
export HDDS_INTEROP_DIAGNOSTICS=1

Working with FastDDS

FastDDS uses little-endian delimited CDR2:

# No special configuration needed
./my_hdds_app

Working with Cyclone DDS

Cyclone DDS uses little-endian parameter list CDR2:

# No special configuration needed
./my_hdds_app

Troubleshooting

No Discovery

  1. Check multicast routing: ip route show | grep 239.255
  2. Verify firewall allows UDP 7400-7500
  3. Enable diagnostics: HDDS_INTEROP_DIAGNOSTICS=1

Partial Discovery

  1. Check domain ID matches across all participants
  2. Verify QoS compatibility (esp. Reliability, Durability)
  3. Check clock synchronization for timestamps

Data Not Received

  1. Verify topic name and type match exactly
  2. Check QoS compatibility between writer/reader
  3. Enable UDP logging: HDDS_LOG_UDP=1

Next Steps