Struct devices::virtio::descriptor_chain::DescriptorChain
source · pub struct DescriptorChain {
mem: GuestMemory,
index: u16,
pub reader: Reader,
pub writer: Writer,
pub id: Option<u16>,
pub count: u16,
}
Expand description
A virtio descriptor chain.
This is a low-level representation of the memory regions in a descriptor chain. Most code should
use virtio::Reader
and virtio::Writer
rather than working with DescriptorChain
memory regions directly.
Fields§
§mem: GuestMemory
§index: u16
Index into the descriptor table.
reader: Reader
The readable memory regions that make up the descriptor chain.
writer: Writer
The writable memory regions that make up the descriptor chain.
id: Option<u16>
The descriptor chain id(only if it is a packed virtqueue descriptor chain)
count: u16
Number of descriptor in descriptor chain
Implementations§
source§impl DescriptorChain
impl DescriptorChain
sourcepub fn new(
chain: impl DescriptorChainIter,
mem: &GuestMemory,
index: u16
) -> Result<DescriptorChain>
pub fn new( chain: impl DescriptorChainIter, mem: &GuestMemory, index: u16 ) -> Result<DescriptorChain>
Read all descriptors from chain
into a new DescriptorChain
instance.
This function validates the following properties of the descriptor chain:
- The chain contains at least one descriptor.
- Each descriptor has a non-zero length.
- Each descriptor’s memory falls entirely within a contiguous region of
mem
. - The total length of the descriptor chain data is representable in
u32
.
If these properties do not hold, Err
will be returned.
§Arguments
chain
- Iterator that will be walked to retrieve all of the descriptors in the chain.mem
- TheGuestMemory
backing the descriptor table and descriptor memory regions.index
- The index of the first descriptor in the chain.
fn validate_mem_regions( mem: &GuestMemory, readable_regions: &[MemRegion], writable_regions: &[MemRegion] ) -> Result<()>
sourcepub fn mem(&self) -> &GuestMemory
pub fn mem(&self) -> &GuestMemory
Returns a reference to the GuestMemory
instance.
Auto Trait Implementations§
impl RefUnwindSafe for DescriptorChain
impl Send for DescriptorChain
impl Sync for DescriptorChain
impl Unpin for DescriptorChain
impl UnwindSafe for DescriptorChain
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.