Skip to main content

Crate zerodds_iceoryx_cyclone

Crate zerodds_iceoryx_cyclone 

Source
Expand description

Crate zerodds-iceoryx-cyclone. Safety classification: STANDARD (FFI bridge over libiceoryx_binding_c; unsafe is reviewed and bounded).

ZeroDDS ↔ Cyclone DDS same-host zero-copy bridge over the iceoryx C++ (POSH) shared-memory transport — the SHM stack Cyclone uses through its iox_psmx plugin (with the iox-roudi daemon), as opposed to the iceoryx2-Rust stack zerodds_flatdata bridges to natively.

This crate FFI-binds the stable libiceoryx_binding_c C ABI (no C++ name mangling) and speaks Cyclone’s PSMX chunk convention directly, so a ZeroDDS process can READ a Cyclone-published sample and WRITE one a Cyclone reader consumes — true cross-vendor same-host zero-copy.

Wire facts (reverse-engineered + live-verified, see docs/interop/cyclone-iceoryx-shm-ground-truth.md):

  • iceoryx ServiceDescription { "DDS_CYCLONE", <type-name>, ".<topic>" };
  • each chunk’s iceoryx user-header is a DdsPsmxMetadata, the user payload the sample (raw native struct for a self-contained type — RAW_DATA).

Linux + iceoryx-POSH only: the FFI compiles under cfg(all(target_os = "linux", feature = "posh")) and links libiceoryx_binding_c. Without the feature the crate exposes only the representation-level DdsPsmxMetadata type so it builds anywhere.

Structs§

DdsPsmxMetadata
Cyclone dds_psmx_metadata_t (dds/ddsc/dds_psmx.h) — the iceoryx user-header carried alongside every PSMX sample. Field sizes are the live-verified layout: instance_id is u32 (not u64), which is what places sample_size at the correct offset.

Constants§

CYCLONE_IOX_SERVICE
The fixed iceoryx service string Cyclone’s iox_psmx registers under.

Functions§

iox_event_name
Builds the iceoryx event string for topic in partition the way Cyclone does: "<partition>.<topic>", with a leading "." for the empty partition.