@@ -256,42 +256,37 @@ impl ObjectInterface for Socket {
256256 }
257257 }
258258 VsockState :: ReceiveRequest => {
259- let result = {
260- const HEADER_SIZE : usize = size_of :: < Hdr > ( ) ;
261- let mut driver_guard = hardware:: get_vsock_driver ( ) . unwrap ( ) . lock ( ) ;
262- let local_cid = driver_guard. get_cid ( ) ;
263-
264- driver_guard. send_packet ( HEADER_SIZE , |buffer| {
265- let response = unsafe { & mut * buffer. as_mut_ptr ( ) . cast :: < Hdr > ( ) } ;
266-
267- response. src_cid = le64:: from_ne ( local_cid) ;
268- response. dst_cid = le64:: from_ne ( raw. remote_cid . into ( ) ) ;
269- response. src_port = le32:: from_ne ( port) ;
270- response. dst_port = le32:: from_ne ( raw. remote_port ) ;
271- response. len = le32:: from_ne ( 0 ) ;
272- response. type_ = le16:: from_ne ( Type :: Stream . into ( ) ) ;
273- if local_cid != u64:: from ( cid) && cid != u32:: MAX {
274- response. op = le16:: from_ne ( Op :: Rst . into ( ) ) ;
275- } else {
276- response. op = le16:: from_ne ( Op :: Response . into ( ) ) ;
277- }
278- response. flags = le32:: from_ne ( 0 ) ;
279- response. buf_alloc = le32:: from_ne (
280- crate :: executor:: vsock:: RAW_SOCKET_BUFFER_SIZE as u32 ,
281- ) ;
282- response. fwd_cnt = le32:: from_ne ( raw. fwd_cnt ) ;
283- } ) ;
284-
285- let endpoint = VsockEndpoint :: new ( raw. remote_port , raw. remote_cid ) ;
259+ const HEADER_SIZE : usize = size_of :: < Hdr > ( ) ;
260+ let mut driver_guard = hardware:: get_vsock_driver ( ) . unwrap ( ) . lock ( ) ;
261+ let local_cid = driver_guard. get_cid ( ) ;
262+
263+ driver_guard. send_packet ( HEADER_SIZE , |buffer| {
264+ let response = unsafe { & mut * buffer. as_mut_ptr ( ) . cast :: < Hdr > ( ) } ;
265+
266+ response. src_cid = le64:: from_ne ( local_cid) ;
267+ response. dst_cid = le64:: from_ne ( raw. remote_cid . into ( ) ) ;
268+ response. src_port = le32:: from_ne ( port) ;
269+ response. dst_port = le32:: from_ne ( raw. remote_port ) ;
270+ response. len = le32:: from_ne ( 0 ) ;
271+ response. type_ = le16:: from_ne ( Type :: Stream . into ( ) ) ;
272+ if local_cid != u64:: from ( cid) && cid != u32:: MAX {
273+ response. op = le16:: from_ne ( Op :: Rst . into ( ) ) ;
274+ } else {
275+ response. op = le16:: from_ne ( Op :: Response . into ( ) ) ;
276+ }
277+ response. flags = le32:: from_ne ( 0 ) ;
278+ response. buf_alloc =
279+ le32:: from_ne ( crate :: executor:: vsock:: RAW_SOCKET_BUFFER_SIZE as u32 ) ;
280+ response. fwd_cnt = le32:: from_ne ( raw. fwd_cnt ) ;
281+ } ) ;
286282
287- // Move the accepted connection to an ephemeral port so the
288- // listener entry can be reset to Listen for the next accept.
289- let conn_port = guard. move_to_ephemeral ( port) ?;
283+ let endpoint = VsockEndpoint :: new ( raw. remote_port , raw. remote_cid ) ;
290284
291- Poll :: Ready ( Ok ( ( conn_port, endpoint) ) )
292- } ;
285+ // Move the accepted connection to an ephemeral port so the
286+ // listener entry can be reset to Listen for the next accept.
287+ let conn_port = guard. move_to_ephemeral ( port) ?;
293288
294- result
289+ Poll :: Ready ( Ok ( ( conn_port , endpoint ) ) )
295290 }
296291 _ => Poll :: Ready ( Err ( Errno :: Badf ) ) ,
297292 }
0 commit comments