diff --git a/examples/aarch64/src/main.rs b/examples/aarch64/src/main.rs index 5922d65a..bc2e2156 100644 --- a/examples/aarch64/src/main.rs +++ b/examples/aarch64/src/main.rs @@ -227,7 +227,7 @@ fn virtio_socket(transport: T) -> virtio_drivers::Result<()> { for k in 0..EXCHANGE_NUM { let mut buffer = [0u8; 24]; let socket_event = socket.wait_for_event()?; - let VsockEventType::Received {length, ..} = socket_event.event_type else { + let VsockEventType::Received { length, .. } = socket_event.event_type else { panic!("Received unexpected socket event {:?}", socket_event); }; let read_length = socket.recv(host_address, port, &mut buffer)?; diff --git a/src/device/socket/connectionmanager.rs b/src/device/socket/connectionmanager.rs index 430f5e85..1a6915f6 100644 --- a/src/device/socket/connectionmanager.rs +++ b/src/device/socket/connectionmanager.rs @@ -226,6 +226,18 @@ impl VsockConnectionManager { Ok(bytes_read) } + /// Returns the number of bytes currently available in the recv buffer. + pub fn recv_buffer_available_bytes(&mut self, peer: VsockAddr, src_port: u32) -> Result { + let (_, connection) = get_connection(&mut self.connections, peer, src_port)?; + Ok(connection.buffer.available()) + } + + /// Sends a credit update to the given peer. + pub fn update_credit(&mut self, peer: VsockAddr, src_port: u32) -> Result { + let (_, connection) = get_connection(&mut self.connections, peer, src_port)?; + self.driver.credit_update(&connection.info) + } + /// Blocks until we get some event from the vsock device. pub fn wait_for_event(&mut self) -> Result { loop {