diff options
-rw-r--r-- | devices/src/virtio/controller.rs | 19 | ||||
-rw-r--r-- | src/wl.rs | 7 |
2 files changed, 24 insertions, 2 deletions
diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs index 8ed0a3a..07f5cbd 100644 --- a/devices/src/virtio/controller.rs +++ b/devices/src/virtio/controller.rs @@ -86,7 +86,6 @@ pub enum MsgOnSocketRequest { DeviceType, Features, - AckFeatures(u64), Activate { @@ -100,12 +99,13 @@ pub enum MsgOnSocketRequest { }, Reset, - Kill, } #[derive(Debug, Serialize, Deserialize)] pub enum BincodeRequest { + DebugLabel, + QueueMaxSizes, ReadConfig { offset: u64, len: usize }, @@ -139,6 +139,8 @@ pub enum MsgOnSocketResponse { #[derive(Debug, Deserialize, Serialize)] pub enum BincodeResponse { + DebugLabel(String), + QueueMaxSizes(Vec<u16>), ReadConfig(Vec<u8>), @@ -310,6 +312,19 @@ impl Drop for Controller { } impl VirtioDevice for Controller { + fn debug_label(&self) -> String { + if let Err(e) = self.socket.send(BincodeRequest::DebugLabel) { + return format!("remote virtio (unknown type; {})", e); + } + + let label = match self.socket.recv_bincode() { + Ok(BincodeResponse::DebugLabel(label)) => label, + response => panic!("bad response to DebugLabel: {:?}", response), + }; + + format!("remote {}", label) + } + fn keep_fds(&self) -> Vec<RawFd> { let mut keep_fds = Vec::new(); diff --git a/src/wl.rs b/src/wl.rs index 5e5c0e6..c04ec06 100644 --- a/src/wl.rs +++ b/src/wl.rs @@ -55,6 +55,13 @@ fn main() { loop { use poly_msg_socket::Value::*; match msg_socket.recv() { + Ok(Bincode(BincodeRequest::DebugLabel)) => { + let result = wl.debug_label(); + if let Err(e) = msg_socket.send(BincodeResponse::DebugLabel(result)) { + panic!("responding to DebugLabel failed: {}", e); + } + } + Ok(MsgOnSocket(MsgOnSocketRequest::DeviceType)) => { let result = wl.device_type(); if let Err(e) = msg_socket.send(MsgOnSocketResponse::DeviceType(result)) { |