Enum vm_control::VmRequest
source · pub enum VmRequest {
Show 25 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,
Throttle(usize, u32),
}
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
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
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
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
Register for event notification
UnregisterListener
Unregister for notifications for event
Unregister
Unregister for all event notification
SuspendVm
Suspend VM VCPUs and Devices until resume.
ResumeVm
Resume VM VCPUs and Devices.
VcpuPidTid
Returns Vcpus PID/TID
Throttle(usize, u32)
Throttles the requested vCPU for microseconds
Implementations§
source§impl VmRequest
impl VmRequest
sourcepub 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),
kick_vcpu: impl Fn(usize, 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
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), kick_vcpu: impl Fn(usize, 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<'de> Deserialize<'de> for VmRequest
impl<'de> Deserialize<'de> for VmRequest
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl RefUnwindSafe for VmRequest
impl Send for VmRequest
impl Sync for VmRequest
impl Unpin for VmRequest
impl UnwindSafe for VmRequest
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
§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>
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>
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)
&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)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.