pub trait PetriVmmBackend {
type VmmConfig;
type VmRuntime: PetriVmRuntime;
// Required methods
fn check_compat(firmware: &Firmware, arch: MachineArch) -> bool;
fn quirks(firmware: &Firmware) -> (GuestQuirksInner, VmmQuirks);
fn default_servicing_flags() -> OpenHclServicingFlags;
fn create_guest_dump_disk( ) -> Result<Option<(Arc<TempPath>, Box<dyn FnOnce() -> Result<Box<dyn ReadWriteSeek>>>)>>;
fn new(resolver: &ArtifactResolver<'_>) -> Self;
fn run<'life0, 'async_trait>(
self,
config: PetriVmConfig,
modify_vmm_config: Option<impl 'async_trait + FnOnce(Self::VmmConfig) -> Self::VmmConfig + Send>,
resources: &'life0 PetriVmResources,
) -> Pin<Box<dyn Future<Output = Result<Self::VmRuntime>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}Expand description
Trait for VMM-specific contruction and runtime resources
Required Associated Types§
Sourcetype VmRuntime: PetriVmRuntime
type VmRuntime: PetriVmRuntime
Runtime object
Required Methods§
Sourcefn check_compat(firmware: &Firmware, arch: MachineArch) -> bool
fn check_compat(firmware: &Firmware, arch: MachineArch) -> bool
Check whether the combination of firmware and architecture is supported on the VMM.
Sourcefn quirks(firmware: &Firmware) -> (GuestQuirksInner, VmmQuirks)
fn quirks(firmware: &Firmware) -> (GuestQuirksInner, VmmQuirks)
Select backend specific quirks guest and vmm quirks.
Sourcefn default_servicing_flags() -> OpenHclServicingFlags
fn default_servicing_flags() -> OpenHclServicingFlags
Get the default servicing flags (based on what this backend supports)
Sourcefn create_guest_dump_disk() -> Result<Option<(Arc<TempPath>, Box<dyn FnOnce() -> Result<Box<dyn ReadWriteSeek>>>)>>
fn create_guest_dump_disk() -> Result<Option<(Arc<TempPath>, Box<dyn FnOnce() -> Result<Box<dyn ReadWriteSeek>>>)>>
Create a disk for guest crash dumps, and a post-test hook to open the disk to allow for reading the dumps.
Sourcefn new(resolver: &ArtifactResolver<'_>) -> Self
fn new(resolver: &ArtifactResolver<'_>) -> Self
Resolve any artifacts needed to use this backend
Sourcefn run<'life0, 'async_trait>(
self,
config: PetriVmConfig,
modify_vmm_config: Option<impl 'async_trait + FnOnce(Self::VmmConfig) -> Self::VmmConfig + Send>,
resources: &'life0 PetriVmResources,
) -> Pin<Box<dyn Future<Output = Result<Self::VmRuntime>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn run<'life0, 'async_trait>(
self,
config: PetriVmConfig,
modify_vmm_config: Option<impl 'async_trait + FnOnce(Self::VmmConfig) -> Self::VmmConfig + Send>,
resources: &'life0 PetriVmResources,
) -> Pin<Box<dyn Future<Output = Result<Self::VmRuntime>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Create and start VM from the generic config using the VMM backend
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.