[rialto] Add communication protocol library for host and rialto
This cl adds a communication protocol library that includes
Request and Response definitions for communication between the
host and rialto. The Request and Response messages are
(de)serialized in CBOR format and exchanged via vsock, enabling
the handling of partial packets.
In addition, an end-to-end test has been included to cover this
functionality. The test verifies the following steps that
correspond to the intended usage of the library:
- The host sends a Request to rialto serialized in CBOR.
- rialto deserializes the Request, executes it, and prepares a
Response.
- rialto sends the Response to the host serialized in CBOR.
- The host deserializes the Response.
Bug: 291732060
Test: atest rialto_test
Change-Id: I5f6412949e34b2431d060703e6dea1b96c92fde5
diff --git a/rialto/src/error.rs b/rialto/src/error.rs
index 461870b..23667ed 100644
--- a/rialto/src/error.rs
+++ b/rialto/src/error.rs
@@ -23,7 +23,10 @@
pub type Result<T> = result::Result<T, Error>;
-#[derive(Clone, Debug)]
+type CiboriumSerError = ciborium::ser::Error<virtio_drivers::Error>;
+type CiboriumDeError = ciborium::de::Error<virtio_drivers::Error>;
+
+#[derive(Debug)]
pub enum Error {
/// Hypervisor error.
Hypervisor(HypervisorError),
@@ -43,8 +46,10 @@
MissingVirtIOSocketDevice,
/// Failed VirtIO driver operation.
VirtIODriverOperationFailed(virtio_drivers::Error),
- /// Failed to receive data.
- ReceivingDataFailed(virtio_drivers::Error),
+ /// Failed to serialize.
+ SerializationFailed(CiboriumSerError),
+ /// Failed to deserialize.
+ DeserializationFailed(CiboriumDeError),
}
impl fmt::Display for Error {
@@ -65,7 +70,8 @@
Self::VirtIODriverOperationFailed(e) => {
write!(f, "Failed VirtIO driver operation: {e}")
}
- Self::ReceivingDataFailed(e) => write!(f, "Failed to receive data: {e}"),
+ Self::SerializationFailed(e) => write!(f, "Failed to serialize: {e}"),
+ Self::DeserializationFailed(e) => write!(f, "Failed to deserialize: {e}"),
}
}
}
@@ -105,3 +111,15 @@
Self::VirtIODriverOperationFailed(e)
}
}
+
+impl From<CiboriumSerError> for Error {
+ fn from(e: CiboriumSerError) -> Self {
+ Self::SerializationFailed(e)
+ }
+}
+
+impl From<CiboriumDeError> for Error {
+ fn from(e: CiboriumDeError) -> Self {
+ Self::DeserializationFailed(e)
+ }
+}