byteor_pipeline_backings_shm/
region.rs

1//! Raw region attach helpers.
2
3use std::path::Path;
4
5use crate::{AttachOptions, BackingError};
6
7fn transport_open_options(opts: &AttachOptions) -> byteor_transport_shm::OpenOptions {
8    let mut o = byteor_transport_shm::OpenOptions::new()
9        .blocking(opts.blocking)
10        .prefault(opts.prefault);
11    if let Some(p) = &opts.path {
12        o = o.path(p.clone());
13    }
14    o
15}
16
17fn resolve_path<'a>(opts: &'a AttachOptions, lane: &'a str) -> Option<&'a Path> {
18    let _ = lane;
19    opts.path.as_deref()
20}
21
22/// Attach to a SequencedSlots region.
23///
24/// Note: the v1 `LaneRx`/`LaneTx` adapters for sequenced-slots / single-ring execution
25/// will be implemented alongside the kernel + executor bring-up.
26pub fn attach_sequenced_slots_region(
27    opts: &AttachOptions,
28    lane: &str,
29) -> Result<byteor_transport_shm::SequencedSlotsRegion<4>, BackingError> {
30    if lane.is_empty() {
31        return Err(BackingError::Invalid("lane name is empty"));
32    }
33
34    let o = transport_open_options(opts);
35    let region = if let Some(path) = resolve_path(opts, lane) {
36        byteor_transport_shm::SequencedSlotsRegion::<4>::open_path_with(path, o)?
37    } else {
38        byteor_transport_shm::SequencedSlotsRegion::<4>::open_with(lane, o)?
39    };
40
41    Ok(region)
42}