summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--devices/src/virtio/controller.rs19
-rw-r--r--src/wl.rs7
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)) {