summary refs log tree commit diff
path: root/src/linux.rs
diff options
context:
space:
mode:
authorJingkui Wang <jkwang@google.com>2018-10-03 13:04:47 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-11-19 16:28:35 -0800
commite13b180f74ad6d0b1cb1db2a198e294da97e526c (patch)
tree438e0623a7ec0b0583087da9a5214e6008fad2d9 /src/linux.rs
parentb23c091c8bfd37cab8be15c0912d684187969c63 (diff)
downloadcrosvm-e13b180f74ad6d0b1cb1db2a198e294da97e526c.tar
crosvm-e13b180f74ad6d0b1cb1db2a198e294da97e526c.tar.gz
crosvm-e13b180f74ad6d0b1cb1db2a198e294da97e526c.tar.bz2
crosvm-e13b180f74ad6d0b1cb1db2a198e294da97e526c.tar.lz
crosvm-e13b180f74ad6d0b1cb1db2a198e294da97e526c.tar.xz
crosvm-e13b180f74ad6d0b1cb1db2a198e294da97e526c.tar.zst
crosvm-e13b180f74ad6d0b1cb1db2a198e294da97e526c.zip
crosvm: use msg_socket in vm_control
Refactor existing code to use msg_socket.

BUG=None
TEST=local build and run

Change-Id: Iee72326b330e035303f679e1aedd6e5d18ad4f8a
Reviewed-on: https://chromium-review.googlesource.com/1260260
Commit-Ready: Jingkui Wang <jkwang@google.com>
Tested-by: Jingkui Wang <jkwang@google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'src/linux.rs')
-rw-r--r--src/linux.rs17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/linux.rs b/src/linux.rs
index 40f32a1..44c2aef 100644
--- a/src/linux.rs
+++ b/src/linux.rs
@@ -28,12 +28,13 @@ use byteorder::{ByteOrder, LittleEndian};
 use devices::{self, PciDevice, VirtioPciDevice};
 use io_jail::{self, Minijail};
 use kvm::*;
+use msg_socket::{MsgReceiver, MsgSender, UnlinkMsgSocket};
 use net_util::Tap;
 use qcow::{self, ImageType, QcowFile};
 use sys_util;
 use sys_util::*;
 use vhost;
-use vm_control::VmRequest;
+use vm_control::{VmRequest, VmResponse};
 
 use Config;
 
@@ -788,11 +789,15 @@ pub fn run_config(cfg: Config) -> Result<()> {
     if let Some(ref path_string) = cfg.socket_path {
         let path = Path::new(path_string);
         let dgram = UnixDatagram::bind(path).map_err(Error::CreateSocket)?;
-        control_sockets.push(UnlinkUnixDatagram(dgram));
+        control_sockets.push(UnlinkMsgSocket::<VmResponse, VmRequest>::new(
+            UnlinkUnixDatagram(dgram),
+        ));
     };
     let (wayland_host_socket, wayland_device_socket) =
         UnixDatagram::pair().map_err(Error::CreateSocket)?;
-    control_sockets.push(UnlinkUnixDatagram(wayland_host_socket));
+    control_sockets.push(UnlinkMsgSocket::<VmResponse, VmRequest>::new(
+        UnlinkUnixDatagram(wayland_host_socket),
+    ));
     // Balloon gets a special socket so balloon requests can be forwarded from the main process.
     let (balloon_host_socket, balloon_device_socket) =
         UnixDatagram::pair().map_err(Error::CreateSocket)?;
@@ -805,7 +810,7 @@ pub fn run_config(cfg: Config) -> Result<()> {
 
 fn run_control(
     mut linux: RunnableLinuxVm,
-    control_sockets: Vec<UnlinkUnixDatagram>,
+    control_sockets: Vec<UnlinkMsgSocket<VmResponse, VmRequest>>,
     balloon_host_socket: UnixDatagram,
     sigchld_fd: SignalFd,
 ) -> Result<()> {
@@ -1045,7 +1050,7 @@ fn run_control(
                 }
                 Token::VmControl { index } => {
                     if let Some(socket) = control_sockets.get(index as usize) {
-                        match VmRequest::recv(socket.as_ref()) {
+                        match socket.recv() {
                             Ok(request) => {
                                 let mut running = true;
                                 let response = request.execute(
@@ -1054,7 +1059,7 @@ fn run_control(
                                     &mut running,
                                     &balloon_host_socket,
                                 );
-                                if let Err(e) = response.send(socket.as_ref()) {
+                                if let Err(e) = socket.send(&response) {
                                     error!("failed to send VmResponse: {:?}", e);
                                 }
                                 if !running {