[rialto] Enable rialto to receive messages longer than recv buffer
This cl allows rialto to receive messages longer then the receive
buffer of the connection manager. It achieves this by sending a
credit update to the peer when the receive buffer is empty.
Test: atest rialto_test
Bug: 292080257
Change-Id: Ia301d12b200c967e00796695748ff6cd9334b44d
diff --git a/rialto/src/communication.rs b/rialto/src/communication.rs
index 50722f2..1b94912 100644
--- a/rialto/src/communication.rs
+++ b/rialto/src/communication.rs
@@ -100,7 +100,16 @@
}
fn recv(&mut self, buffer: &mut [u8]) -> virtio_drivers::Result<usize> {
- self.connection_manager.recv(self.peer_addr, self.peer_addr.port, buffer)
+ let bytes_read =
+ self.connection_manager.recv(self.peer_addr, self.peer_addr.port, buffer)?;
+
+ let buffer_available_bytes = self
+ .connection_manager
+ .recv_buffer_available_bytes(self.peer_addr, self.peer_addr.port)?;
+ if buffer_available_bytes == 0 && bytes_read > 0 {
+ self.connection_manager.update_credit(self.peer_addr, self.peer_addr.port)?;
+ }
+ Ok(bytes_read)
}
fn wait_for_send(&mut self, buffer: &[u8]) -> virtio_drivers::Result {
diff --git a/rialto/tests/test.rs b/rialto/tests/test.rs
index ee7ecb4..e13b7a1 100644
--- a/rialto/tests/test.rs
+++ b/rialto/tests/test.rs
@@ -57,9 +57,7 @@
}
fn check_processing_reverse_request(vm: &mut ServiceVm) -> Result<()> {
- // TODO(b/292080257): Test with message longer than the receiver's buffer capacity
- // 1024 bytes once the guest virtio-vsock driver fixes the credit update in recv().
- let message = "abc".repeat(166);
+ let message = "abc".repeat(500);
let request = Request::Reverse(message.as_bytes().to_vec());
let response = vm.process_request(request)?;