@@ -6,12 +6,15 @@ use std::os::unix::io::{AsRawFd, RawFd};
6
6
use crate :: virtio:: test_utils:: VirtQueue as GuestQ ;
7
7
use crate :: virtio:: vsock:: device:: { RXQ_INDEX , TXQ_INDEX } ;
8
8
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;
10
15
use utils:: epoll:: { EpollEvent , EventSet } ;
11
16
use utils:: eventfd:: EventFd ;
12
17
use vm_memory:: { GuestAddress , GuestMemoryMmap } ;
13
- use core:: result;
14
- use crate :: Error as DeviceError ;
15
18
16
19
type Result < T > = std:: result:: Result < T , VsockError > ;
17
20
@@ -190,4 +193,35 @@ impl<'a> EventHandlerContext<'a> {
190
193
self . device
191
194
. handle_rxq_event ( & EpollEvent :: new ( EventSet :: IN , 0 ) ) ;
192
195
}
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