Skip to main content

hdds-discovery-dump

Dump live DDS discovery state - see participants, topics, readers, and writers on your network.

Overview

hdds-discovery-dump joins a DDS domain and displays the discovery state after collecting announcements. It shows all discovered participants with their endpoints, and all topics with their associated writers and readers.

Installation

From Source

cd hdds/tools/hdds-discovery-dump
cargo build --release

Binary at target/release/hdds-discovery-dump.

From Cargo

cargo install hdds-discovery-dump

Usage

hdds-discovery-dump [OPTIONS]

Options:
-d, --domain <DOMAIN> DDS domain ID [default: 0]
--timeout <TIMEOUT> Discovery duration in seconds [default: 5]
-f, --format <FORMAT> Output format: pretty, json [default: pretty]
-w, --watch <WATCH> Continuous monitoring mode (refresh every N seconds)
-t, --topic <TOPIC> Filter by topic name
--quiet Compact output
-h, --help Print help
-V, --version Print version

Examples

Basic Discovery Dump

hdds-discovery-dump

Output:

>>> Discovery dump (domain=0)
Discovering for 5 seconds...

=== DDS Discovery State ===

Participants: 3 participant(s) discovered

[1] 01aa0001.c0a80064.00000001.000001c1
State: Alive
Endpoints: 7400, 7401
Lease: 10000ms (expires in 8523ms)

[2] 010f0001.c0a80065.00000002.000001c1
State: Alive
Endpoints: 7400, 7401
Lease: 15000ms (expires in 12100ms)

Topics: 2 topic(s)

Topic: temperature
Writers: 1 Readers: 2
W 01aa0001.c0a80064.00000001.00000102 (type: Temperature)
R 010f0001.c0a80065.00000002.00000107 (type: Temperature)
R 01aa0001.c0a80064.00000003.00000107 (type: Temperature)

Topic: sensor_data
Writers: 2 Readers: 1
W 01aa0001.c0a80064.00000001.00000202 (type: SensorReading)
W 010f0001.c0a80065.00000002.00000202 (type: SensorReading)
R 01aa0001.c0a80064.00000003.00000207 (type: SensorReading)

--- Summary ---
Participants: 3 Topics: 2 Writers: 3 Readers: 3

Different Domain

hdds-discovery-dump -d 42

Longer Discovery Time

For networks with slow discovery or many participants:

hdds-discovery-dump --timeout 15

JSON Output

hdds-discovery-dump --format json

Output:

{"domain":0,"participants":[{"guid":"01aa0001.c0a80064.00000001.000001c1","state":"Alive","endpoints":["7400","7401"],"lease_ms":10000}],"topics":[{"name":"temperature","writers":[{"guid":"01aa0001.c0a80064.00000001.00000102","type":"Temperature"}],"readers":[{"guid":"01aa0001.c0a80064.00000003.00000107","type":"Temperature"}]}]}

Pretty-print with jq:

hdds-discovery-dump -f json | jq .

Watch Mode (Continuous Monitoring)

Refresh every 2 seconds:

hdds-discovery-dump -w 2

The screen clears and updates with fresh discovery state. Press Ctrl+C to stop.

Filter by Topic

Only show topics matching a pattern:

hdds-discovery-dump -t temperature
hdds-discovery-dump -t sensor

Quiet Mode

Compact single-line output per item:

hdds-discovery-dump --quiet

Output:

  [1] 01aa0001.c0a80064.00000001.000001c1 (Alive) 7400, 7401
[2] 010f0001.c0a80065.00000002.000001c1 (Alive) 7400, 7401
temperature (1W/2R)
sensor_data (2W/1R)

Combine Options

Watch a specific topic in quiet mode:

hdds-discovery-dump -w 1 -t chatter --quiet

Output Details

Participant Information

FieldDescription
GUID16-byte globally unique identifier (format: prefix.prefix.prefix.entityId)
StateAlive or Stale (lease expired)
EndpointsLocator ports (multicast/unicast)
LeaseRemaining time before participant is considered dead

Topic Information

FieldDescription
NameTopic name string
WritersCount and list of DataWriters
ReadersCount and list of DataReaders
TypeData type name for each endpoint

Vendor Identification

GUID prefixes identify vendors:

  • 01aa.... - HDDS
  • 010f.... - FastDDS (eProsima)
  • 0101.... - RTI Connext
  • 0110.... - CycloneDDS
  • 0103.... - OpenDDS

Use Cases

Network Debugging

Check if publishers and subscribers have discovered each other:

hdds-discovery-dump -t my_topic

If writers exist but no readers (or vice versa), there's a discovery or QoS mismatch.

Cross-Vendor Interop Testing

Verify participants from different DDS vendors can see each other:

hdds-discovery-dump --timeout 10 -f json | jq '.participants[].guid'

Continuous Monitoring Dashboard

Run in watch mode to monitor a live system:

hdds-discovery-dump -w 5

Scripted Health Checks

# Check if any participants exist
count=$(hdds-discovery-dump --timeout 3 -f json | jq '.participants | length')
if [ "$count" -eq 0 ]; then
echo "No DDS participants found!"
exit 1
fi

Export Discovery State

hdds-discovery-dump -f json > discovery_$(date +%Y%m%d_%H%M%S).json

Comparison with Other Tools

Featurehdds-discovery-dumpRTI Admin ConsoleFastDDS Monitor
CLI-basedYesNo (GUI)No (GUI)
JSON exportBuilt-inXMLJSON
Cross-vendorYesRTI onlyFastDDS only
Watch modeYesYesYes
Topic filterYesYesYes
Lightweight~2MB~500MB~100MB

Troubleshooting

No Participants Found

  1. Check domain ID matches other participants
  2. Verify multicast is enabled on your network
  3. Increase timeout: --timeout 15
  4. Check firewall allows UDP ports 7400-7500

Discovery Not Available

If you see "Discovery not available (intra-process mode?)":

  • The participant was created with IntraProcess transport only
  • Switch to UdpMulticast transport to enable network discovery

Stale Participants

Participants showing State: Stale have missed their lease renewal:

  • The remote process may have crashed
  • Network connectivity issues
  • Lease duration too short for network latency

Exit Codes

CodeMeaning
0Success
1Error (DDS initialization failed, etc.)