Skip to main content

RTPS Wire Compatibility

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

Protocol Version​

PropertyValue
RTPS Version2.5
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​