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§
Sourcefn read(&self, addr: GuestAddress, buf: &mut [u8]) -> Result<()>
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.
Provided Methods§
Sourcefn read_u16_le(&self, addr: GuestAddress) -> Result<u16>
fn read_u16_le(&self, addr: GuestAddress) -> Result<u16>
Sourcefn read_u32_le(&self, addr: GuestAddress) -> Result<u32>
fn read_u32_le(&self, addr: GuestAddress) -> Result<u32>
Sourcefn read_u64_le(&self, addr: GuestAddress) -> Result<u64>
fn read_u64_le(&self, addr: GuestAddress) -> Result<u64>
Sourcefn write_u16_le(&self, addr: GuestAddress, value: u16) -> Result<()>
fn write_u16_le(&self, addr: GuestAddress, value: u16) -> Result<()>
Sourcefn write_u32_le(&self, addr: GuestAddress, value: u32) -> Result<()>
fn write_u32_le(&self, addr: GuestAddress, value: u32) -> Result<()>
Sourcefn write_u64_le(&self, addr: GuestAddress, value: u64) -> Result<()>
fn write_u64_le(&self, addr: GuestAddress, value: u64) -> Result<()>
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".