Function microvmi::init

source ·
pub fn init(
    driver_type: Option<DriverType>,
    init_params: Option<DriverInitParams>
) -> Result<Box<dyn Introspectable>, MicrovmiError>
Expand description

libmicrovmi initialization entrypoint

This function will initialize a libmicrovmi driver and call the hypervisor VMI API. It returns a Box<dyn Introspectable> trait object, which implements the Introspectable trait.

For complete documentation on driver init params, please check DriverInitParams struct.

§Arguments

  • driver_type: optional driver type to initialize. If None, all compiled drivers will be initialized one by one. The first that succeeds will be returned.
  • init_params: optional driver initialization parameters

§Examples

use microvmi::init;
// 1 - attempt to init all drivers, without any init parameters
let drv = init(None, None);

// 2 - add parameters: vm_name
// a `vm_name` parameter is required for multiple drivers: Xen, KVM, VirtualBox
use microvmi::api::params::{DriverInitParams, CommonInitParams};
let init_params = DriverInitParams {
    common: Some(CommonInitParams { vm_name: String::from("windows10")}),
    ..Default::default()
};
let drv = init(None, Some(init_params));

// 3 - add parameters: KVM specific params
// KVM requires an additional unix socket to be specified
// and specify the KVM driver only
use microvmi::api::params::KVMInitParams;
use microvmi::api::DriverType;
let init_params = DriverInitParams {
    common: Some(CommonInitParams { vm_name: String::from("windows10")}),
    kvm: Some(KVMInitParams::UnixSocket {path: String::from("/tmp/introspector")}),
    ..Default::default()
};
let drv = init(Some(DriverType::KVM), Some(init_params));