Skip to content

Commit d9d00ec

Browse files
vsock: added helper functions for queue manipulation.
Signed-off-by: Cihodaru Alexandru <[email protected]>
1 parent 08a4690 commit d9d00ec

File tree

1 file changed

+38
-4
lines changed

1 file changed

+38
-4
lines changed

src/devices/src/virtio/vsock/test_utils.rs

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ use std::os::unix::io::{AsRawFd, RawFd};
66
use crate::virtio::test_utils::VirtQueue as GuestQ;
77
use crate::virtio::vsock::device::{RXQ_INDEX, TXQ_INDEX};
88
use crate::virtio::vsock::packet::{VsockPacket, VSOCK_PKT_HDR_SIZE};
9-
use crate::virtio::{VirtioDevice, Vsock, VsockBackend, VsockChannel, VsockEpollListener, VsockError, VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE, QueueError};
9+
use crate::virtio::{
10+
QueueError, VirtioDevice, Vsock, VsockBackend, VsockChannel, VsockEpollListener, VsockError,
11+
VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE,
12+
};
13+
use crate::Error as DeviceError;
14+
use core::result;
1015
use utils::epoll::{EpollEvent, EventSet};
1116
use utils::eventfd::EventFd;
1217
use vm_memory::{GuestAddress, GuestMemoryMmap};
13-
use core::result;
14-
use crate::Error as DeviceError;
1518

1619
type Result<T> = std::result::Result<T, VsockError>;
1720

@@ -190,4 +193,35 @@ impl<'a> EventHandlerContext<'a> {
190193
self.device
191194
.handle_rxq_event(&EpollEvent::new(EventSet::IN, 0));
192195
}
193-
}
196+
}
197+
198+
impl<B> Vsock<B>
199+
where
200+
B: VsockBackend,
201+
{
202+
pub fn write_element_in_queue(
203+
vsock: &Vsock<B>,
204+
idx: usize,
205+
val: u64,
206+
) -> result::Result<(), DeviceError> {
207+
if idx > vsock.queue_events.len() {
208+
return Err(DeviceError::QueueError(QueueError::DescIndexOutOfBounds(
209+
idx as u16,
210+
)));
211+
}
212+
vsock.queue_events[idx].write(val).unwrap();
213+
Ok(())
214+
}
215+
216+
pub fn get_element_from_queue(
217+
vsock: &Vsock<B>,
218+
idx: usize,
219+
) -> result::Result<u64, DeviceError> {
220+
if idx > vsock.queue_events.len() {
221+
return Err(DeviceError::QueueError(QueueError::DescIndexOutOfBounds(
222+
idx as u16,
223+
)));
224+
}
225+
Ok(vsock.queue_events[idx].as_raw_fd() as u64)
226+
}
227+
}

0 commit comments

Comments
 (0)