From 98d69a42870030ad533dd8eda5da817430c2b71c Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Thu, 26 Mar 2020 11:54:48 +0000 Subject: send wl::Params over socket --- devices/src/virtio/controller.rs | 33 +++++++++++++-------------------- devices/src/virtio/wl.rs | 1 + 2 files changed, 14 insertions(+), 20 deletions(-) (limited to 'devices/src') diff --git a/devices/src/virtio/controller.rs b/devices/src/virtio/controller.rs index ba2543f..4930e44 100644 --- a/devices/src/virtio/controller.rs +++ b/devices/src/virtio/controller.rs @@ -28,29 +28,26 @@ //! the virtio queue, and routing messages in and out of `WlState`. Possible events include the kill //! event, available descriptors on the `in` or `out` queue, and incoming data on any vfd's socket. -use std::collections::BTreeMap as Map; use std::fmt::{self, Formatter}; use std::os::unix::io::{AsRawFd, RawFd}; -use std::path::PathBuf; use std::sync::Arc; use std::thread; use msg_socket::{MsgReceiver, MsgSocket}; use msg_socket2::de::{EnumAccessWithFds, SeqAccessWithFds, VariantAccessWithFds, VisitorWithFds}; -use msg_socket2::ser::{SerializeStructVariantFds, SerializeTupleVariantFds}; +use msg_socket2::ser::{SerializeAdapter, SerializeStructVariantFds, SerializeTupleVariantFds}; use msg_socket2::{DeserializeWithFds, DeserializerWithFds, FdSerializer, SerializeWithFds}; use serde::ser::{SerializeStructVariant, SerializeTupleVariant, Serializer}; use serde::{Deserialize, Serialize}; use sys_util::net::UnixSeqpacket; use sys_util::{error, EventFd, GuestMemory, PollContext, PollToken, SharedMemory}; -use super::resource_bridge::*; -use super::{Interrupt, InterruptProxyEvent, Queue, VirtioDevice}; +use super::{Interrupt, InterruptProxyEvent, Params, Queue, VirtioDevice}; use crate::{ pci::{PciAddress, PciBarConfiguration, PciCapability, PciCapabilityID}, MemoryParams, }; -use vm_control::{MaybeOwnedFd, VmMemoryControlRequestSocket}; +use vm_control::MaybeOwnedFd; // As far as I can tell, these never change on the other side, so it's // fine to just copy them over. @@ -82,9 +79,7 @@ impl PciCapability for RemotePciCapability { #[derive(Debug)] pub enum Request { Create { - // wayland_paths: Map, - vm_socket: MaybeOwnedFd, - // resource_bridge: Option, + device_params: Params, memory_params: MemoryParams, }, @@ -130,11 +125,11 @@ impl SerializeWithFds for Request { match self { Create { - vm_socket: _, + device_params, memory_params, } => { let mut sv = serializer.serialize_struct_variant("Request", 0, "Create", 2)?; - sv.serialize_field("vm_socket", &())?; + sv.serialize_field("device_params", &SerializeAdapter::new(device_params))?; sv.serialize_field("memory_params", memory_params)?; sv.end() } @@ -209,11 +204,11 @@ impl SerializeWithFds for Request { match self { Create { - vm_socket, + device_params, memory_params, } => { let mut sv = serializer.serialize_struct_variant("Request", 0, "Create", 2)?; - sv.serialize_field("vm_socket", vm_socket)?; + sv.serialize_field("device_params", device_params)?; sv.serialize_field("memory_params", memory_params)?; sv.end() } @@ -336,7 +331,9 @@ impl<'de> DeserializeWithFds<'de> for Request { } Ok(Request::Create { - vm_socket: seq.next_element()?.ok_or_else(|| too_short(0))?, + device_params: seq + .next_element()? + .ok_or_else(|| too_short(0))?, memory_params: seq .next_element()? .ok_or_else(|| too_short(1))?, @@ -685,16 +682,12 @@ pub struct Controller { impl Controller { pub fn create( - wayland_paths: Map, - vm_socket: VmMemoryControlRequestSocket, - resource_bridge: Option, + device_params: Params, memory_params: MemoryParams, socket: Socket, ) -> Result { socket.send(Request::Create { - // wayland_paths, - vm_socket: MaybeOwnedFd::new_borrowed(&vm_socket), - // resource_bridge, + device_params, memory_params, })?; diff --git a/devices/src/virtio/wl.rs b/devices/src/virtio/wl.rs index 5a3505b..6671693 100644 --- a/devices/src/virtio/wl.rs +++ b/devices/src/virtio/wl.rs @@ -1547,6 +1547,7 @@ use std::fmt::Formatter; use super::VirtioDeviceNew; +#[derive(Debug)] pub struct Params { pub wayland_paths: Map, pub vm_socket: VmMemoryControlRequestSocket, -- cgit 1.4.1