From e235c6de4fc0a791483ba8994b00be68c7e7cd71 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Wed, 25 Sep 2019 14:47:30 +0200 Subject: [PATCH] vmm: Add VM creation and startup helpers Based on the newly defined Cloud Hypervisor IPC, those helpers send VmCreate and VmStart requests respectively. This will be used by the main thread to create and start a VM based on the CLI parameters. Signed-off-by: Samuel Ortiz --- vmm/src/lib.rs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index 37de6d498..35478eb10 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -213,6 +213,44 @@ pub fn start_vmm_thread( .map_err(Error::VmmThreadSpawn) } +pub fn vm_create( + api_evt: EventFd, + api_sender: Sender, + config: Arc, +) -> Result<()> { + let (response_sender, response_receiver) = channel(); + + // Send the VM creation request. + api_sender + .send(ApiRequest::VmCreate(config, response_sender)) + .map_err(Error::ApiRequestSend)?; + api_evt.write(1).map_err(Error::EventFdWrite)?; + + response_receiver + .recv() + .map_err(Error::ApiResponseRecv)? + .map_err(Error::ApiVmCreate)?; + + Ok(()) +} + +pub fn vm_start(api_evt: EventFd, api_sender: Sender) -> Result<()> { + let (response_sender, response_receiver) = channel(); + + // Send the VM start request. + api_sender + .send(ApiRequest::VmStart(response_sender)) + .map_err(Error::ApiRequestSend)?; + api_evt.write(1).map_err(Error::EventFdWrite)?; + + response_receiver + .recv() + .map_err(Error::ApiResponseRecv)? + .map_err(Error::ApiVmStart)?; + + Ok(()) +} + pub struct Vmm { epoll: EpollContext, exit_evt: EventFd,