diff options
Diffstat (limited to 'devices/src')
-rw-r--r-- | devices/src/virtio/controller.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs index 4a770cc..2fe8488 100644 --- a/devices/src/virtio/controller.rs +++ b/devices/src/virtio/controller.rs @@ -65,6 +65,8 @@ pub enum MsgOnSocketRequest { out_queue_evt: MaybeOwnedFd<EventFd>, }, + Reset, + Kill, } @@ -90,6 +92,7 @@ impl From<BincodeRequest> for Request { #[derive(Debug, MsgOnSocket)] pub enum MsgOnSocketResponse { + Reset(bool), Kill, } @@ -151,7 +154,9 @@ impl Worker { self.shutdown = true; } - Ok(Bincode(BincodeResponse)) => unreachable!(), + Ok(msg) => { + panic!("unexpected message received: {:?}", msg); + } Err(e) => { error!("recv failed: {:?}", e); @@ -371,4 +376,19 @@ impl VirtioDevice for Controller { } } } + + fn reset(&mut self) -> bool { + if let Err(e) = self.socket.send(MsgOnSocketRequest::Reset) { + error!("failed to send Reset: {}", e); + return false; + } + + match self.socket.recv_msg_on_socket() { + Ok(MsgOnSocketResponse::Reset(result)) => result, + response => { + error!("bad response to Reset: {:?}", response); + false + } + } + } } |