summary refs log tree commit diff
path: root/devices/src/virtio/controller.rs
diff options
context:
space:
mode:
Diffstat (limited to 'devices/src/virtio/controller.rs')
-rw-r--r--devices/src/virtio/controller.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs
index c5d2ef4..857bbe8 100644
--- a/devices/src/virtio/controller.rs
+++ b/devices/src/virtio/controller.rs
@@ -83,6 +83,8 @@ pub enum MsgOnSocketRequest {
         memory_params: MemoryParams,
     },
 
+    Features,
+
     AckFeatures(u64),
 
     Activate {
@@ -125,6 +127,7 @@ impl From<BincodeRequest> for Request {
 
 #[derive(Debug, MsgOnSocket)]
 pub enum MsgOnSocketResponse {
+    Features(u64),
     Reset(bool),
     Kill,
 }
@@ -321,7 +324,16 @@ impl VirtioDevice for Controller {
     }
 
     fn features(&self) -> u64 {
-        1 << VIRTIO_WL_F_TRANS_FLAGS | 1 << VIRTIO_F_VERSION_1
+        if let Err(e) = self.socket.send(MsgOnSocketRequest::Features) {
+            panic!("failed to send Features: {}", e);
+        }
+
+        match self.socket.recv_msg_on_socket() {
+            Ok(MsgOnSocketResponse::Features(features)) => features,
+            response => {
+                panic!("bad response to Reset: {:?}", response);
+            }
+        }
     }
 
     fn ack_features(&mut self, value: u64) {