38 lines
2.6 KiB
Markdown
38 lines
2.6 KiB
Markdown
# RustDDS 0.14.3, vendored for flowRS
|
|
|
|
RustDDS (https://github.com/Atostek/RustDDS) is Atostek's pure-Rust DDS, licensed under the
|
|
Apache License 2.0 (`LICENSE.md`, unchanged). This directory is the crates.io package
|
|
`rustdds-0.14.3` (`src/`, `README.md`, `LICENSE.md`, `rustfmt.toml`, and Cargo's normalized
|
|
`Cargo.toml` with its example and test targets removed, since their sources are not copied, and
|
|
a `cargo-machete` ignore list for two dependencies it declares and flowRS's build does not use).
|
|
flowRS's generated ROS 2 nodes run on it through `ros2-client` 0.11.1; the workspace
|
|
`Cargo.toml` (and every generated node's, and `tools/perfbench`'s) points `rustdds` here with
|
|
`[patch.crates-io]`.
|
|
|
|
The first commit that adds this directory adds the package unchanged. Every change since is
|
|
listed below, and each changed file says so at its top (Apache-2.0 §4(b)).
|
|
|
|
## Changes
|
|
|
|
1. **Endpoints announce DDS USER_DATA** (`src/dds/participant.rs`,
|
|
`src/discovery/sedp_messages.rs`, `src/discovery/discovery_db.rs`). 0.14.3 parsed a remote
|
|
endpoint's USER_DATA but never sent one for its own, so a ROS 2 node on `ros2-client`
|
|
could not advertise its RIHS01 type hash and `ros2 topic info -v` showed it as INVALID.
|
|
`DomainParticipant::set_endpoint_user_data(topic, writer, data)` records the USER_DATA
|
|
the participant's DataWriters (or DataReaders) on a topic announce; the local writer's and
|
|
reader's discovery records take it, and SEDP serializes it as `PID_USER_DATA` (a CDR
|
|
`sequence<octet>`, sent only when set). flowRS sets `typehash=RIHS01_…;`, what
|
|
`rmw_dds_common::encode_type_hash_for_user_data_qos` writes.
|
|
2. **A remote endpoint's USER_DATA is read as its octets** (`sedp_messages.rs`): 0.14.3 handed
|
|
up the parameter's raw bytes, the CDR count included, so `typehash=` followed four bytes of
|
|
length and no reader matched it. The count is now taken off (a value too short for its
|
|
count is kept whole).
|
|
3. **A discovered reader keeps the loopback locators it advertised** (`sedp_messages.rs`,
|
|
`From<RtpsReaderProxy> for ReaderProxy`). `RtpsReaderProxy` keeps loopback locators in a
|
|
bucket of their own, used only once the peer is confirmed to be on this host; the
|
|
conversion back into the discovery record dropped the bucket. A reader reachable at a
|
|
loopback address alone (Cyclone DDS pinned to `lo`: 127.0.0.1, its own or its
|
|
participant's default locator) was left with no locator at all, so a RustDDS writer
|
|
matched it and sent it nothing: on Lyrical with Cyclone on `lo`, ROS to
|
|
the node worked and the node to ROS did not. The record now carries the advertised list
|
|
whole, and the proxy built from it splits it again.
|