[service-vm] Send shutdown request to exit rialto
And rialto will be in a loop of processing request till receiving
the shutdown request.
Bug: 299432766
Test: atest rialto_test
Change-Id: Ifd65adde74a370a91fc462930bb513a3e1fe65b9
diff --git a/rialto/src/communication.rs b/rialto/src/communication.rs
index ee4ecdb..50722f2 100644
--- a/rialto/src/communication.rs
+++ b/rialto/src/communication.rs
@@ -20,7 +20,7 @@
use core::mem;
use core::result;
use log::info;
-use service_vm_comm::{Request, Response};
+use service_vm_comm::{Response, ServiceVmRequest};
use tinyvec::ArrayVec;
use virtio_drivers::{
self,
@@ -84,7 +84,7 @@
}
}
- pub fn read_request(&mut self) -> Result<Request> {
+ pub fn read_request(&mut self) -> Result<ServiceVmRequest> {
Ok(ciborium::from_reader(self)?)
}
diff --git a/rialto/src/main.rs b/rialto/src/main.rs
index d777b2d..4e91574 100644
--- a/rialto/src/main.rs
+++ b/rialto/src/main.rs
@@ -33,7 +33,7 @@
use hyp::{get_mem_sharer, get_mmio_guard};
use libfdt::FdtError;
use log::{debug, error, info};
-use service_vm_comm::VmType;
+use service_vm_comm::{ServiceVmRequest, VmType};
use virtio_drivers::{
device::socket::{VsockAddr, VMADDR_CID_HOST},
transport::{pci::bus::PciRoot, DeviceType, Transport},
@@ -140,9 +140,11 @@
debug!("Found socket device: guest cid = {:?}", socket_device.guest_cid());
let mut vsock_stream = VsockStream::new(socket_device, host_addr())?;
- let response = requests::process_request(vsock_stream.read_request()?)?;
- vsock_stream.write_response(&response)?;
- vsock_stream.flush()?;
+ while let ServiceVmRequest::Process(req) = vsock_stream.read_request()? {
+ let response = requests::process_request(req)?;
+ vsock_stream.write_response(&response)?;
+ vsock_stream.flush()?;
+ }
vsock_stream.shutdown()?;
Ok(())
diff --git a/rialto/tests/test.rs b/rialto/tests/test.rs
index 20d00b5..fc6e20a 100644
--- a/rialto/tests/test.rs
+++ b/rialto/tests/test.rs
@@ -55,8 +55,8 @@
let message = "abc".repeat(166);
let request = Request::Reverse(message.as_bytes().to_vec());
- let response = vm.process_request(&request)?;
- info!("Received response '{response:?}' for the request '{request:?}'.");
+ let response = vm.process_request(request)?;
+ info!("Received response: {response:?}.");
let expected_response: Vec<u8> = message.as_bytes().iter().rev().cloned().collect();
assert_eq!(Response::Reverse(expected_response), response);