Skip to main content

Crate zerodds_transport_shm

Crate zerodds_transport_shm 

Source
Expand description

Crate zerodds-transport-shm. Safety classification: STANDARD.

Cross-Process Shared-Memory-Transport für ZeroDDS — POSIX shm_open/mmap mit Lock-free Single-Producer-Single-Consumer- Ringbuffer.

§Spec

  • DDSI-RTPS 2.5 §9.4 — Locator-Kind LOCATOR_KIND_SHM (vendor- reserved range; ZeroDDS-Wert in crates/rtps/src/wire_types.rs).
  • ZeroDDS-SHM-Transport 1.0 — vendor-spezifischer Transport- Spec (Segment-Layout, SpSc-Ringbuffer, Cleanup-Semantik), docs/spec-coverage/zerodds-shm-transport-1.0.md.

§Hinweis zur OMG-Normativität

OMG normiert keinen SHM-Transport für DDS. Vendoren haben jeweils eigene Implementationen: Cyclone DDS integriert iceoryx (third- party), FastDDS hat einen eigenen SHM-Transport, RTI hat RTI-Connext-DDS-SHM. ZeroDDS definiert seine eigene Variante explizit als ZeroDDS-SHM-Transport-1.0-Spec.

§Implementiert (RC1)

  • POSIX shm_open + mmap via shared_memory-Crate.
  • SpSc-Ringbuffer pro (Writer, Reader)-Paar — lock-free head/tail-AcqRel-Atomics auf shared memory.
  • Owner-Crash-Recovery via predictable os_id + shm_unlink vor jedem Owner-create(). Idempotent.
  • Advisory flock-Race-Protection beim Owner-Create (Linux/macOS).
  • Length-Prefix-Frame-Format mit Wraparound-Padding-Marker.
  • Shutdown-Flag im Segment-Header für Owner→Consumer-Termination- Signaling.

§Plattform-Support

PlattformStatus
Linux✅ primary
macOS✅ supported
Windowsnicht-getestet (shared_memory-Crate liefert die Mapping-Primitives, aber unsere flock-Race-Protection und shm_unlink-Cleanup sind unix-only)

§Public API

§Unsafe-Scope

Begrenzt auf das posix-Modul: zwei ptr::read/ptr::write auf mapped memory plus die libc::flock-FFI. Alles andere ist AtomicU{32,64} über shared memory; Rust garantiert wohldefiniertes Verhalten von Atomic-Operationen über Prozess-Grenzen, wenn beide Prozesse dieselbe Adresse mappen.

Re-exports§

pub use posix::PosixShmError;
pub use posix::PosixShmTransport;
pub use posix::ShmConfig;
pub use posix::ShmRole;

Modules§

posix
POSIX-SHM-Transport.