Vsock

Struct Vsock 

Source
pub struct Vsock<B> {
    pub rx_packet: VsockPacketRx,
    pub tx_packet: VsockPacketTx,
    /* private fields */
}
Expand description

Structure representing the vsock device.

Fields§

§rx_packet: VsockPacketRx§tx_packet: VsockPacketTx

Implementations§

Source§

impl<B> Vsock<B>
where B: VsockBackend + Debug,

Source

pub fn with_queues( cid: u64, backend: B, queues: Vec<VirtQueue>, ) -> Result<Vsock<B>, VsockError>

Auxiliary function for creating a new virtio-vsock device with the given VM CID, vsock backend and empty virtio queues.

Source

pub fn new(cid: u64, backend: B) -> Result<Vsock<B>, VsockError>

Create a new virtio-vsock device with the given VM CID and vsock backend.

Source

pub fn id(&self) -> &str

Provides the ID of this vsock device as used in MMIO device identification.

Source

pub fn cid(&self) -> u64

Retrieve the cid associated with this vsock device.

Source

pub fn backend(&self) -> &B

Access the backend behind the device.

Source

pub fn signal_used_queue(&self, qidx: usize) -> Result<(), DeviceError>

Signal the guest driver that we’ve used some virtio buffers that it had previously made available.

Source

pub fn signal_used_queues(&self, used_queues: &[u16]) -> Result<(), DeviceError>

Signal the guest which queues are ready to be consumed

Source

pub fn process_rx(&mut self) -> Result<bool, InvalidAvailIdx>

Walk the driver-provided RX queue buffers and attempt to fill them up with any data that we have pending. Return true if descriptors have been added to the used ring, and false otherwise.

Source

pub fn process_tx(&mut self) -> Result<bool, InvalidAvailIdx>

Walk the driver-provided TX queue buffers, package them up as vsock packets, and send them to the backend for processing. Return true if descriptors have been added to the used ring, and false otherwise.

Source

pub fn send_transport_reset_event(&mut self) -> Result<(), DeviceError>

Source§

impl<B> Vsock<B>
where B: Debug + VsockBackend + 'static,

Source

pub fn handle_rxq_event(&mut self, evset: EventSet) -> Vec<u16>

Source

pub fn handle_txq_event(&mut self, evset: EventSet) -> Vec<u16>

Source

pub fn handle_evq_event(&mut self, evset: EventSet)

Source

pub fn notify_backend( &mut self, evset: EventSet, ) -> Result<Vec<u16>, InvalidAvailIdx>

Notify backend of new events.

Trait Implementations§

Source§

impl<B: Debug> Debug for Vsock<B>

Source§

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

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

impl<B> MutEventSubscriber for Vsock<B>
where B: Debug + VsockBackend + 'static,

Source§

fn process(&mut self, event: Events, ops: &mut EventOps<'_>)

Process events triggered in the event manager loop. Read more
Source§

fn init(&mut self, ops: &mut EventOps<'_>)

Initialization called by the EventManager when the subscriber is registered. Read more
Source§

impl<B> Persist<'_> for Vsock<B>
where B: VsockBackend + 'static + Debug,

Source§

type State = VsockFrontendState

The type of the object representing the state of the component.
Source§

type ConstructorArgs = VsockConstructorArgs<B>

The type of the object holding the constructor arguments.
Source§

type Error = VsockError

The type of the error that can occur while constructing the object.
Source§

fn save(&self) -> Self::State

Returns the current state of the component.
Source§

fn restore( constructor_args: Self::ConstructorArgs, state: &Self::State, ) -> Result<Self, Self::Error>

Constructs a component from a specified state.
Source§

impl<B> VirtioDevice for Vsock<B>
where B: VsockBackend + Debug + 'static,

Source§

fn const_device_type() -> u32

The virtio device type (as a constant of the struct).
Source§

fn device_type(&self) -> u32

The virtio device type. Read more
Source§

fn avail_features(&self) -> u64

Get the available features offered by device.
Source§

fn acked_features(&self) -> u64

Get acknowledged features of the driver.
Source§

fn set_acked_features(&mut self, acked_features: u64)

Set acknowledged features of the driver. This function must maintain the following invariant: Read more
Source§

fn queues(&self) -> &[VirtQueue]

Returns the device queues.
Source§

fn queues_mut(&mut self) -> &mut [VirtQueue]

Returns a mutable reference to the device queues.
Source§

fn queue_events(&self) -> &[EventFd]

Returns the device queues event fds.
Source§

fn interrupt_trigger(&self) -> &dyn VirtioInterrupt

Source§

fn read_config(&self, offset: u64, data: &mut [u8])

Reads this device configuration space at offset.
Source§

fn write_config(&mut self, offset: u64, data: &[u8])

Writes to this device configuration space at offset.
Source§

fn activate( &mut self, mem: GuestMemoryMmap, interrupt: Arc<dyn VirtioInterrupt>, ) -> Result<(), ActivateError>

Performs the formal activation for a device, which can be verified also with is_activated.
Source§

fn is_activated(&self) -> bool

Checks if the resources of this device are activated.
Source§

fn kick(&mut self)

Kick the device, as if it had received external events.
Source§

fn has_feature(&self, feature: u64) -> bool

Check if virtio device has negotiated given feature.
Source§

fn interrupt_status(&self) -> Arc<AtomicU32>

Returns the current device interrupt status.
Source§

fn avail_features_by_page(&self, page: u32) -> u32

The set of feature bits shifted by page * 32.
Source§

fn ack_features_by_page(&mut self, page: u32, value: u32)

Acknowledges that this set of features should be enabled.
Source§

fn reset(&mut self) -> Option<(Arc<dyn VirtioInterrupt>, Vec<EventFd>)>

Optionally deactivates this device and returns ownership of the guest memory map, interrupt event, and queue events.
Source§

fn mark_queue_memory_dirty( &mut self, mem: &GuestMemoryMmap, ) -> Result<(), QueueError>

Mark pages used by queues as dirty.
Source§

fn as_cow_file_engine(&self) -> Option<&CowFileEngine>

Returns a COW file engine if the device exposes one (NYX extension).
Source§

fn nyx_handle_queue_event(&mut self, _queue_index: u16)

Handle a queue notification from an MMIO write (NYX extension).

Auto Trait Implementations§

§

impl<B> Freeze for Vsock<B>
where B: Freeze,

§

impl<B> !RefUnwindSafe for Vsock<B>

§

impl<B> Send for Vsock<B>
where B: Send,

§

impl<B> !Sync for Vsock<B>

§

impl<B> Unpin for Vsock<B>
where B: Unpin,

§

impl<B> !UnwindSafe for Vsock<B>

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> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Return the immutable any encapsulated object.
Source§

fn as_mut_any(&mut self) -> &mut (dyn Any + 'static)

Return the mutable encapsulated any object.
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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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.

§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

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

Source§

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>,

Source§

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V