pub enum VmRequest {
Show 24 variants Exit, Powerbtn, Sleepbtn, Rtc { clear_evt: Event, }, SuspendVcpus, Swap(SwapCommand), ResumeVcpus, Gpe { gpe: u32, clear_evt: Option<Event>, }, PciPme(u16), MakeRT, BalloonCommand(BalloonControlCommand), DiskCommand { disk_index: usize, command: DiskControlCommand, }, UsbCommand(UsbControlCommand), GpuCommand(GpuControlCommand), BatCommand(BatteryType, BatControlCommand), HotPlugVfioCommand { device: HotPlugDeviceInfo, add: bool, }, HotPlugNetCommand(NetControlCommand), Snapshot(SnapshotCommand), RegisterListener { socket_addr: String, event: RegisteredEvent, }, UnregisterListener { socket_addr: String, event: RegisteredEvent, }, Unregister { socket_addr: String, }, SuspendVm, ResumeVm, VcpuPidTid,
}
Expand description

A request to the main process to perform some operation on the VM.

Unless otherwise noted, each request should expect a VmResponse::Ok to be received on success.

Variants§

§

Exit

Break the VM’s run loop and exit.

§

Powerbtn

Trigger a power button event in the guest.

§

Sleepbtn

Trigger a sleep button event in the guest.

§

Rtc

Fields

§clear_evt: Event

Trigger a RTC interrupt in the guest. When the irq associated with the RTC is resampled, it will be re-asserted as long as clear_evt is not signaled.

§

SuspendVcpus

Suspend the VM’s VCPUs until resume.

§

Swap(SwapCommand)

Swap the memory content into files on a disk

§

ResumeVcpus

Resume the VM’s VCPUs that were previously suspended.

§

Gpe

Fields

§gpe: u32
§clear_evt: Option<Event>

Inject a general-purpose event. If clear_evt is provided, when the irq associated with the GPE is resampled, it will be re-asserted as long as clear_evt is not signaled.

§

PciPme(u16)

Inject a PCI PME

§

MakeRT

Make the VM’s RT VCPU real-time.

§

BalloonCommand(BalloonControlCommand)

Command for balloon driver.

§

DiskCommand

Fields

§disk_index: usize

Send a command to a disk chosen by disk_index. disk_index is a 0-based count of --disk, --rwdisk, and -r command-line options.

§

UsbCommand(UsbControlCommand)

Command to use controller.

§

GpuCommand(GpuControlCommand)

Command to modify the gpu.

§

BatCommand(BatteryType, BatControlCommand)

Command to set battery.

§

HotPlugVfioCommand

Fields

§add: bool

Command to add/remove multiple vfio-pci devices

§

HotPlugNetCommand(NetControlCommand)

Command to add/remove network tap device as virtio-pci device

§

Snapshot(SnapshotCommand)

Command to Snapshot devices

§

RegisterListener

Fields

§socket_addr: String

Register for event notification

§

UnregisterListener

Fields

§socket_addr: String

Unregister for notifications for event

§

Unregister

Fields

§socket_addr: String

Unregister for all event notification

§

SuspendVm

Suspend VM VCPUs and Devices until resume.

§

ResumeVm

Resume VM VCPUs and Devices.

§

VcpuPidTid

Returns Vcpus PID/TID

Implementations§

source§

impl VmRequest

source

pub fn execute( &self, vm: &impl Vm, disk_host_tubes: &[Tube], pm: &mut Option<Arc<Mutex<dyn PmResource + Send>>>, gpu_control_tube: Option<&Tube>, usb_control_tube: Option<&Tube>, bat_control: &mut Option<BatControl>, kick_vcpus: impl Fn(VcpuControl), force_s2idle: bool, swap_controller: Option<&SwapController>, device_control_tube: &Tube, vcpu_size: usize, irq_handler_control: &Tube, snapshot_irqchip: impl Fn() -> Result<Value>, suspended_pvclock_state: &mut Option<ClockState> ) -> VmResponse

Executes this request on the given Vm and other mutable state.

This does not return a result, instead encapsulating the success or failure in a VmResponse with the intended purpose of sending the response back over the socket that received this VmRequest.

suspended_pvclock_state: If the hypervisor has its own pvclock (not the same as virtio-pvclock) and the VM is suspended (not just the vCPUs, but the full VM), then suspended_pvclock_state will be used to store the ClockState saved just after the vCPUs were suspended. It is important that we save the value right after the vCPUs are suspended and restore it right before the vCPUs are resumed (instead of, more naturally, during the snapshot/restore steps) because the pvclock continues to tick even when the vCPUs are suspended.

Trait Implementations§

source§

impl Debug for VmRequest

source§

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

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

impl<'de> Deserialize<'de> for VmRequest

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for VmRequest

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

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
§

impl<T> Downcast for T
where T: 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>

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)

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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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, 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.
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,