zerodds-corba-rt 1.0 — Spec Coverage

Source: docs/specs/zerodds-corba-rt-1.0.md (ZeroDDS vendor spec)

Implementation:

§1 Priority + mapping

§1.1 Priority

Spec: §1.1 — CORBA priority 0..=32767; new rejects out-of-range, clamped clamps.

Repo: crates/corba-rt/src/priority.rs::Priority (new, clamped, value).

Tests: crates/corba-rt/src/priority.rs::priority_range.

Status: done

§1.2 PriorityMapping

Spec: §1.2 — trait to_native/to_corba; LinearPriorityMapping linear onto the native window; native out-of-window → None.

Repo: crates/corba-rt/src/priority.rs::PriorityMapping, LinearPriorityMapping.

Tests: crates/corba-rt/src/priority.rs::{linear_mapping_endpoints, native_out_of_window_unmapped}.

Status: done

§2 Priority model

§2.1 PriorityModelPolicy

Spec: §2.1 — PriorityModel ServerDeclared/ClientPropagated; effective_priority (propagated vs server-declared).

Repo: crates/corba-rt/src/policy.rs::PriorityModel, PriorityModelPolicy::effective_priority.

Tests: crates/corba-rt/src/policy.rs::{client_propagated_uses_propagated_priority, server_declared_ignores_propagated}.

Status: done

§2.2 RTCorbaPriority ServiceContext + byte conformance

Spec: §2.2 — client priority as ServiceContext id = 10, CDR encapsulation; BE golden 00 000539 (priority 1337).

Repo: crates/corba-rt/src/propagation.rs::RT_CORBA_PRIORITY_SC_ID, encode_priority_context / decode_priority_context.

Tests: crates/corba-rt/src/propagation.rs::{sc_id_is_ten, priority_context_roundtrip, byte_exact_big_endian}.

Status: done

§3 Threadpools + bands

§3.1 Threadpool/lane

Spec: §3.1 — Lane/Threadpool; lane_for(priority) = highest priority ≤ priority (otherwise lowest).

Repo: crates/corba-rt/src/policy.rs::Lane, Threadpool::lane_for + static_capacity.

Tests: crates/corba-rt/src/policy.rs::lane_selection_picks_highest_covering.

Status: done

§3.2 PriorityBand

Spec: §3.2 — PriorityBand/PriorityBandedConnectionPolicy; band_for(priority) = index of the covering band.

Repo: crates/corba-rt/src/policy.rs::PriorityBand, PriorityBandedConnectionPolicy::band_for.

Tests: crates/corba-rt/src/policy.rs::priority_band_selection.

Status: done

§4 RTCORBA::Current

§4.1 RtCurrent

Spec: §4 — RtCurrent::get_priority/set_priority for the current context.

Repo: crates/corba-rt/src/current.rs::RtCurrent.

Tests: crates/corba-rt/src/current.rs::{get_set_priority, default_is_zero}.

Status: done

§5 Threadpool runtime + mutex + scheduling

§5.7 Threadpool runtime (lanes on OS threads)

Spec: §5.7 — the threadpool-with-lanes as a runnable runtime: OS threads per lane (static + dynamic), job routing by priority, native scheduler priority per lane.

Repo: crates/corba-rt/src/threadpool.rs::ThreadpoolRuntime (start/dispatch/select_lane), NativePrioritySetter hook (platform unsafe at the caller; the crate stays forbid(unsafe_code)).

Tests: crates/corba-rt/src/threadpool.rs::{dispatches_and_runs_all_jobs, routes_to_lane_by_priority, native_priority_hook_invoked_per_worker, rejects_when_buffering_off_and_no_worker, dynamic_worker_spawns_under_saturation}.

Status: partial — lanes, static and dynamic workers and routing by priority are built and checked; the native scheduler priority is set only by a caller hook, no implementation in the repo (§5.7.1).

§5.7.1 Native scheduler priority per lane

Spec: §5.7 — native scheduler priority per lane; non-goals — “the actual spawning and pthread_setschedparam is a matter of the runtime integration”.

Repo: —

Tests: —

Status: open — NativePrioritySetter is a hook; no crate in the repo implements it (pthread_setschedparam/SCHED_FIFO or a counterpart on other platforms).

§5.6 RTCORBA::Mutex with priority inheritance

Spec: §5.6 — mutex with priority inheritance against priority inversion; the owner inherits the priority of the highest waiter.

Repo: crates/corba-rt/src/mutex.rs::PriorityInheritance (protocol core, no_std) + RtMutex (std, priority-ordered granting, event-driven via Condvar).

Tests: crates/corba-rt/src/mutex.rs::{effective_is_base_without_waiters, owner_inherits_highest_waiter, priority_reverts_on_unblock, rt_mutex_basic_lock_unlock, rt_mutex_try_lock_contended, rt_mutex_grants_highest_priority_waiter_first}.

Status: done

§Scheduling profile — static schedulability analysis

Spec: RT-CORBA scheduling profile — a-priori schedulability for fixed-priority preemptive scheduling (Rate-Monotonic + Response-Time Analysis).

Repo: crates/corba-rt/src/scheduling.rs::TaskSet (assign_rate_monotonic, liu_layland_bound, response_time/is_schedulable_rta).

Tests: crates/corba-rt/src/scheduling.rs::{response_time_analysis_exact_values, rta_stronger_than_liu_layland, overloaded_set_is_unschedulable, liu_layland_bound_known_points, constrained_deadline_tightens_test, rate_monotonic_assigns_shortest_period_highest, implicit_deadline_defaults_to_period}.

Status: done


Audit status

9 done / 1 partial / 1 open / 0 blocked / 0 n/a (informative).

Test run: cargo test -p zerodds-corba-rt — 59 tests green, 0 failed.

Open items: zerodds-corba-rt-1.0.open.en.md.

zerodds-corba-rt 1.0 — Spec-Coverage

Quelle: docs/specs/zerodds-corba-rt-1.0.md (ZeroDDS Vendor-Spec)

Implementation:

§1 Priorität + Mapping

§1.1 Priority

Spec: §1.1 — CORBA-Priorität 0..=32767; new lehnt außerhalb ab, clamped klemmt.

Repo: crates/corba-rt/src/priority.rs::Priority (new, clamped, value).

Tests: crates/corba-rt/src/priority.rs::priority_range.

Status: done

§1.2 PriorityMapping

Spec: §1.2 — Trait to_native/to_corba; LinearPriorityMapping linear auf natives Fenster; native außerhalb → None.

Repo: crates/corba-rt/src/priority.rs::PriorityMapping, LinearPriorityMapping.

Tests: crates/corba-rt/src/priority.rs::{linear_mapping_endpoints, native_out_of_window_unmapped}.

Status: done

§2 Priority-Model

§2.1 PriorityModelPolicy

Spec: §2.1 — PriorityModel ServerDeclared/ClientPropagated; effective_priority (propagiert vs server-deklariert).

Repo: crates/corba-rt/src/policy.rs::PriorityModel, PriorityModelPolicy::effective_priority.

Tests: crates/corba-rt/src/policy.rs::{client_propagated_uses_propagated_priority, server_declared_ignores_propagated}.

Status: done

§2.2 RTCorbaPriority-ServiceContext + Byte-Konformität

Spec: §2.2 — Client-Priorität als ServiceContext id = 10, CDR-Encapsulation; BE-Golden 00 000539 (Priorität 1337).

Repo: crates/corba-rt/src/propagation.rs::RT_CORBA_PRIORITY_SC_ID, encode_priority_context / decode_priority_context.

Tests: crates/corba-rt/src/propagation.rs::{sc_id_is_ten, priority_context_roundtrip, byte_exact_big_endian}.

Status: done

§3 Threadpools + Bänder

§3.1 Threadpool/Lane

Spec: §3.1 — Lane/Threadpool; lane_for(priority) = höchste Priorität ≤ priority (sonst niedrigste).

Repo: crates/corba-rt/src/policy.rs::Lane, Threadpool::lane_for + static_capacity.

Tests: crates/corba-rt/src/policy.rs::lane_selection_picks_highest_covering.

Status: done

§3.2 PriorityBand

Spec: §3.2 — PriorityBand/PriorityBandedConnectionPolicy; band_for(priority) = Index des abdeckenden Bandes.

Repo: crates/corba-rt/src/policy.rs::PriorityBand, PriorityBandedConnectionPolicy::band_for.

Tests: crates/corba-rt/src/policy.rs::priority_band_selection.

Status: done

§4 RTCORBA::Current

§4.1 RtCurrent

Spec: §4 — RtCurrent::get_priority/set_priority für den aktuellen Kontext.

Repo: crates/corba-rt/src/current.rs::RtCurrent.

Tests: crates/corba-rt/src/current.rs::{get_set_priority, default_is_zero}.

Status: done

§5 Threadpool-Runtime + Mutex + Scheduling

§5.7 Threadpool-Runtime (Lanes auf OS-Threads)

Spec: §5.7 — der Threadpool-mit-Lanes als lauffähige Laufzeit: pro Lane OS-Threads (statisch + dynamisch), Job-Routing nach Priorität, native Scheduler-Priorität pro Lane.

Repo: crates/corba-rt/src/threadpool.rs::ThreadpoolRuntime (start/dispatch/select_lane), NativePrioritySetter-Hook (plattform-unsafe beim Aufrufer, Crate bleibt forbid(unsafe_code)).

Tests: crates/corba-rt/src/threadpool.rs::{dispatches_and_runs_all_jobs, routes_to_lane_by_priority, native_priority_hook_invoked_per_worker, rejects_when_buffering_off_and_no_worker, dynamic_worker_spawns_under_saturation}.

Status: partial — Lanes, statische und dynamische Worker und das Routing nach Priorität sind gebaut und geprüft; die native Scheduler-Priorität setzt nur ein Hook des Aufrufers, keine Implementierung im Repo (§5.7.1).

§5.7.1 Native Scheduler-Priorität pro Lane

Spec: §5.7 — native Scheduler-Priorität pro Lane; Nicht-Ziele — „the actual spawning and pthread_setschedparam is a matter of the runtime integration“.

Repo: —

Tests: —

Status: open — NativePrioritySetter ist ein Hook; kein Crate im Repo implementiert ihn (pthread_setschedparam/SCHED_FIFO oder Gegenstück auf anderen Plattformen).

§5.6 RTCORBA::Mutex mit Priority-Inheritance

Spec: §5.6 — Mutex mit Priority-Inheritance gegen Priority-Inversion; Owner erbt die Priorität des höchsten Waiters.

Repo: crates/corba-rt/src/mutex.rs::PriorityInheritance (Protokollkern, no_std) + RtMutex (std, prioritäts-geordnete Vergabe, event-driven via Condvar).

Tests: crates/corba-rt/src/mutex.rs::{effective_is_base_without_waiters, owner_inherits_highest_waiter, priority_reverts_on_unblock, rt_mutex_basic_lock_unlock, rt_mutex_try_lock_contended, rt_mutex_grants_highest_priority_waiter_first}.

Status: done

§Scheduling-Profil — Statische Schedulability-Analyse

Spec: RT-CORBA-Scheduling-Profil — a-priori-Schedulability für fixed-priority preemptives Scheduling (Rate-Monotonic + Response-Time-Analyse).

Repo: crates/corba-rt/src/scheduling.rs::TaskSet (assign_rate_monotonic, liu_layland_bound, response_time/is_schedulable_rta).

Tests: crates/corba-rt/src/scheduling.rs::{response_time_analysis_exact_values, rta_stronger_than_liu_layland, overloaded_set_is_unschedulable, liu_layland_bound_known_points, constrained_deadline_tightens_test, rate_monotonic_assigns_shortest_period_highest, implicit_deadline_defaults_to_period}.

Status: done


Audit-Status

9 done / 1 partial / 1 open / 0 blocked / 0 n/a (informative).

Test-Lauf: cargo test -p zerodds-corba-rt — 59 Tests grün, 0 failed.

Offene Punkte: zerodds-corba-rt-1.0.open.md.