Skip to main content

GuestMemory

Trait GuestMemory 

Source
pub trait GuestMemory:
    Send
    + Sync
    + Debug {
    // Required methods
    fn read(&self, addr: GuestAddress, buf: &mut [u8]) -> Result<()>;
    fn write(&self, addr: GuestAddress, buf: &[u8]) -> Result<()>;

    // Provided methods
    fn read_u16_le(&self, addr: GuestAddress) -> Result<u16> { ... }
    fn read_u32_le(&self, addr: GuestAddress) -> Result<u32> { ... }
    fn read_u64_le(&self, addr: GuestAddress) -> Result<u64> { ... }
    fn write_u16_le(&self, addr: GuestAddress, value: u16) -> Result<()> { ... }
    fn write_u32_le(&self, addr: GuestAddress, value: u32) -> Result<()> { ... }
    fn write_u64_le(&self, addr: GuestAddress, value: u64) -> Result<()> { ... }
}
Expand description

Read / write access to guest memory across one or more registered regions.

Implementations are responsible for routing addresses to the underlying host-mapped buffer; callers (virtio devices, snapshot writer, debugger) only see guest-physical addresses.

All methods MUST be byte-accurate: a partial read or write is a hard error, not a silent truncation. This matches the virtio spec’s expectation that descriptor chains either fully resolve or surface as a malformed-payload error to the device handler.

Required Methods§

Source

fn read(&self, addr: GuestAddress, buf: &mut [u8]) -> Result<()>

Read buf.len() bytes from addr into buf.

§Errors

Error::MemoryOutOfRange if the request escapes any registered region, including a request that straddles a region boundary.

Source

fn write(&self, addr: GuestAddress, buf: &[u8]) -> Result<()>

Write buf.len() bytes from buf into guest memory at addr.

§Errors

Same as Self::read.

Provided Methods§

Source

fn read_u16_le(&self, addr: GuestAddress) -> Result<u16>

Read a little-endian u16 from addr.

§Errors

Same as Self::read.

Source

fn read_u32_le(&self, addr: GuestAddress) -> Result<u32>

Read a little-endian u32 from addr.

§Errors

Same as Self::read.

Source

fn read_u64_le(&self, addr: GuestAddress) -> Result<u64>

Read a little-endian u64 from addr.

§Errors

Same as Self::read.

Source

fn write_u16_le(&self, addr: GuestAddress, value: u16) -> Result<()>

Write a little-endian u16 to addr.

§Errors

Same as Self::write.

Source

fn write_u32_le(&self, addr: GuestAddress, value: u32) -> Result<()>

Write a little-endian u32 to addr.

§Errors

Same as Self::write.

Source

fn write_u64_le(&self, addr: GuestAddress, value: u64) -> Result<()>

Write a little-endian u64 to addr.

§Errors

Same as Self::write.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§