#[repr(C)]
pub struct Descriptor { /* private fields */ }
Expand description

A virtio descriptor constraints with C representation.

§Example

use virtio_queue::{Descriptor, Queue, QueueOwnedT};
use vm_memory::{GuestAddress, GuestMemoryMmap};

let m = &GuestMemoryMmap::<()>::from_ranges(&[(GuestAddress(0), 0x10000)]).unwrap();
// Populate the queue with descriptor chains and update the available ring accordingly.
let mut queue = populate_queue(m);
let mut i = queue.iter(m).unwrap();
let mut c = i.next().unwrap();

// Get the first descriptor and access its fields.
let desc = c.next().unwrap();
let _addr = desc.addr();
let _len = desc.len();
let _flags = desc.flags();
let _next = desc.next();
let _is_write_only = desc.is_write_only();
let _has_next = desc.has_next();
let _refers_to_ind_table = desc.refers_to_indirect_table();

Implementations§

source§

impl Descriptor

source

pub fn addr(&self) -> GuestAddress

Return the guest physical address of the descriptor buffer.

source

pub fn len(&self) -> u32

Return the length of the descriptor buffer.

source

pub fn flags(&self) -> u16

Return the flags for this descriptor, including next, write and indirect bits.

source

pub fn next(&self) -> u16

Return the value stored in the next field of the descriptor.

source

pub fn refers_to_indirect_table(&self) -> bool

Check whether this descriptor refers to a buffer containing an indirect descriptor table.

source

pub fn has_next(&self) -> bool

Check whether the VIRTQ_DESC_F_NEXT is set for the descriptor.

source

pub fn is_write_only(&self) -> bool

Check if the driver designated this as a write only descriptor.

If this is false, this descriptor is read only. Write only means the the emulated device can write and the driver can read.

Trait Implementations§

source§

impl ByteValued for Descriptor

source§

fn from_slice(data: &[u8]) -> Option<&Self>

Converts a slice of raw data into a reference of Self. Read more
source§

fn from_mut_slice(data: &mut [u8]) -> Option<&mut Self>

Converts a mutable slice of raw data into a mutable reference of Self. Read more
source§

fn as_slice(&self) -> &[u8]

Converts a reference to self into a slice of bytes. Read more
source§

fn as_mut_slice(&mut self) -> &mut [u8]

Converts a mutable reference to self into a mutable slice of bytes. Read more
source§

fn as_bytes(&mut self) -> VolatileSlice<'_>

Converts a mutable reference to self into a VolatileSlice. This is useful because VolatileSlice provides a Bytes<usize> implementation. Read more
source§

impl Clone for Descriptor

source§

fn clone(&self) -> Descriptor

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Descriptor

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Descriptor

source§

fn default() -> Descriptor

Returns the “default value” for a type. Read more
source§

impl Copy for Descriptor

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.