pub struct AccessPolicy { /* private fields */ }Expand description
The validated policy engine for one session.
Construction validates the entire allowlist against the resources and ceiling; a rejected allowlist creates no engine and therefore no session, and no hardware operation is performed.
Implementations§
Source§impl AccessPolicy
impl AccessPolicy
Sourcepub fn new(
mode: SessionMode,
resources: BTreeMap<ResourceId, MmioResource>,
ceiling: BTreeMap<ResourceId, ResourceCeiling>,
allowlist: impl IntoIterator<Item = AccessRule>,
) -> Result<Self, (AccessRule, Denial)>
pub fn new( mode: SessionMode, resources: BTreeMap<ResourceId, MmioResource>, ceiling: BTreeMap<ResourceId, ResourceCeiling>, allowlist: impl IntoIterator<Item = AccessRule>, ) -> Result<Self, (AccessRule, Denial)>
Builds a policy engine, validating every allowlist rule structurally and against the ceiling. Returns the first offending rule and the reason on failure.
Sourcepub fn mode(&self) -> SessionMode
pub fn mode(&self) -> SessionMode
The session mode (read-only or mutating).
Sourcepub fn resource_ids(&self) -> impl Iterator<Item = ResourceId>
pub fn resource_ids(&self) -> impl Iterator<Item = ResourceId>
IDs of every resource this policy knows about.
Sourcepub fn resource(&self, id: ResourceId) -> Option<&MmioResource>
pub fn resource(&self, id: ResourceId) -> Option<&MmioResource>
Returns the descriptor for id, if known.
Sourcepub fn check_read32(
&self,
resource: ResourceId,
offset: u64,
class: AccessClass,
) -> Result<(), Denial>
pub fn check_read32( &self, resource: ResourceId, offset: u64, class: AccessClass, ) -> Result<(), Denial>
Immediately-before-access validation for a 32-bit read. This covers resource lookup, width, alignment, overflow, logical and mapped bounds, ceiling hard denies, unknown-read permission, and the exact allowlist match. Session/generation staleness is the session server’s job and the volatile read itself is the executor’s.
Sourcepub fn check_write32(
&self,
resource: ResourceId,
offset: u64,
write_mask: u32,
precondition: Option<&WritePrecondition>,
) -> Result<&WritableRegister, Denial>
pub fn check_write32( &self, resource: ResourceId, offset: u64, write_mask: u32, precondition: Option<&WritePrecondition>, ) -> Result<&WritableRegister, Denial>
Immediately-before-access validation for a 32-bit write.
Sourcepub fn check_poll32(
&self,
resource: ResourceId,
offset: u64,
mask: u32,
interval_ns: i64,
timeout_ns: i64,
) -> Result<(), Denial>
pub fn check_poll32( &self, resource: ResourceId, offset: u64, mask: u32, interval_ns: i64, timeout_ns: i64, ) -> Result<(), Denial>
Immediately-before-access validation for repeated polling reads.
Sourcepub fn check_interrupt(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_interrupt(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for an interrupt observation.
Sourcepub fn check_gpio_read(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_gpio_read(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for a GPIO read.
Sourcepub fn check_gpio_write(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_gpio_write(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for a GPIO write. Requires mutation lease.
Sourcepub fn check_i2c_transfer(
&self,
resource: ResourceId,
write_len: usize,
read_len: usize,
) -> Result<(), Denial>
pub fn check_i2c_transfer( &self, resource: ResourceId, write_len: usize, read_len: usize, ) -> Result<(), Denial>
Immediately-before-access validation for an I2C transfer.
Sourcepub fn check_spi_transmit(
&self,
resource: ResourceId,
tx_len: usize,
) -> Result<(), Denial>
pub fn check_spi_transmit( &self, resource: ResourceId, tx_len: usize, ) -> Result<(), Denial>
Immediately-before-access validation for a SPI transmit. Requires mutation lease.
Sourcepub fn check_clock_enable(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_clock_enable(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Clock enable. Requires mutation lease.
Sourcepub fn check_clock_disable(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_clock_disable(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Clock disable. Requires mutation lease.
Sourcepub fn check_clock_is_enabled(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_clock_is_enabled(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Clock is_enabled query.
Sourcepub fn check_clock_set_rate(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_clock_set_rate(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Clock set_rate. Requires mutation lease.
Sourcepub fn check_clock_query_rate(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_clock_query_rate(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Clock query_rate.
Sourcepub fn check_clock_get_rate(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_clock_get_rate(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Clock get_rate.
Sourcepub fn check_reset_assert(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_reset_assert(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Reset assert. Requires mutation lease.
Sourcepub fn check_reset_deassert(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_reset_deassert(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Reset deassert. Requires mutation lease.
Sourcepub fn check_reset_toggle(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_reset_toggle(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Reset toggle. Requires mutation lease.
Sourcepub fn check_reset_status(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_reset_status(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Reset status query.
Sourcepub fn check_serial_read(&self, resource: ResourceId) -> Result<(), Denial>
pub fn check_serial_read(&self, resource: ResourceId) -> Result<(), Denial>
Immediately-before-access validation for Serial read.
Sourcepub fn check_serial_write(
&self,
resource: ResourceId,
tx_len: usize,
) -> Result<(), Denial>
pub fn check_serial_write( &self, resource: ResourceId, tx_len: usize, ) -> Result<(), Denial>
Immediately-before-access validation for Serial write. Requires mutation lease.