From 937d064450e65f2443e7fab10a2308415035fa7e Mon Sep 17 00:00:00 2001 From: bytesnake Date: Sat, 20 May 2017 14:35:38 +0200 Subject: [PATCH] Fixed missing path in Uhyve A missing path due to the isle kind shouldn't be treated as an error. Add the clap library to support commands. --- tools/hermit_proxy/Cargo.toml | 1 + tools/hermit_proxy/src/hermit/mod.rs | 22 ++++++++++++++------ tools/hermit_proxy/src/hermit/multi.rs | 12 +++++------ tools/hermit_proxy/src/hermit/qemu.rs | 12 +++++------ tools/hermit_proxy/src/hermit/uhyve/uhyve.rs | 12 +++++------ tools/hermit_proxy/src/main.rs | 11 ++++++++++ 6 files changed, 46 insertions(+), 24 deletions(-) diff --git a/tools/hermit_proxy/Cargo.toml b/tools/hermit_proxy/Cargo.toml index 85d7e0ff4..d7fe374aa 100755 --- a/tools/hermit_proxy/Cargo.toml +++ b/tools/hermit_proxy/Cargo.toml @@ -12,6 +12,7 @@ errno = "0.2.3" inotify = "0.4" byteorder = "1" log = "0.3" +clap = "2.24.2" [dependencies.env_logger] version = "0.3" diff --git a/tools/hermit_proxy/src/hermit/mod.rs b/tools/hermit_proxy/src/hermit/mod.rs index e3edf02a7..0e3dcb647 100644 --- a/tools/hermit_proxy/src/hermit/mod.rs +++ b/tools/hermit_proxy/src/hermit/mod.rs @@ -32,14 +32,17 @@ pub fn new_isle(path: &str) -> Result> { pub trait Isle { fn num(&self) -> u8; - fn log_file(&self) -> Result; - fn log_path(&self) -> Result; - fn cpu_path(&self) -> Result; + fn log_file(&self) -> Option; + fn log_path(&self) -> Option; + fn cpu_path(&self) -> Option; fn run(&mut self) -> Result<()>; fn is_available(&self) -> Result { - let log = self.log_file()?; + let log = match self.log_file() { + Some(f) => f, + None => return Ok(false) + }; // open the log file let mut file = File::open(log) @@ -63,7 +66,11 @@ pub trait Isle { let mut ino = Inotify::init().unwrap(); // watch on the log path - let log_path = self.log_path()?; + let log_path = match self.log_path() { + Some(f) => f, + None => return Ok(()) + }; + ino.add_watch(Path::new(&log_path), watch_mask::MODIFY | watch_mask::CREATE).unwrap(); let mut buffer = [0; 1024]; @@ -92,7 +99,10 @@ pub trait Isle { fn stop(&self) -> Result<()> { debug!("Stop the HermitIsle"); - let cpu_path = self.cpu_path()?; + let cpu_path = match self.cpu_path() { + Some(f) => f, + None => return Ok(()) + }; let mut cpus_file = File::create(&cpu_path) .map_err(|_| Error::InvalidFile(cpu_path.clone()))?; diff --git a/tools/hermit_proxy/src/hermit/multi.rs b/tools/hermit_proxy/src/hermit/multi.rs index 661a6fd3e..dc9d28c2a 100644 --- a/tools/hermit_proxy/src/hermit/multi.rs +++ b/tools/hermit_proxy/src/hermit/multi.rs @@ -56,16 +56,16 @@ impl Isle for Multi { self.num } - fn log_file(&self) -> Result { - Ok(format!("/sys/hermit/isle{}/log", self.num)) + fn log_file(&self) -> Option { + Some(format!("/sys/hermit/isle{}/log", self.num)) } - fn log_path(&self) -> Result { - Ok("/sys/hermit/".into()) + fn log_path(&self) -> Option { + Some("/sys/hermit/".into()) } - fn cpu_path(&self) -> Result { - Ok(format!("/sys/hermit/isle{}/cpus", self.num)) + fn cpu_path(&self) -> Option { + Some(format!("/sys/hermit/isle{}/cpus", self.num)) } fn run(&mut self) -> Result<()> { diff --git a/tools/hermit_proxy/src/hermit/qemu.rs b/tools/hermit_proxy/src/hermit/qemu.rs index 73f1360c9..1be6511be 100644 --- a/tools/hermit_proxy/src/hermit/qemu.rs +++ b/tools/hermit_proxy/src/hermit/qemu.rs @@ -127,14 +127,14 @@ impl QEmu { impl Isle for QEmu { fn num(&self) -> u8 { 0 } - fn log_file(&self) -> Result { - Ok(self.tmp_file.clone()) + fn log_file(&self) -> Option { + Some(self.tmp_file.clone()) } - fn log_path(&self) -> Result { - Ok("/tmp".into()) + fn log_path(&self) -> Option { + Some("/tmp".into()) } - fn cpu_path(&self) -> Result { - Err(Error::InternalError) + fn cpu_path(&self) -> Option { + None } fn run(&mut self) -> Result<()> { diff --git a/tools/hermit_proxy/src/hermit/uhyve/uhyve.rs b/tools/hermit_proxy/src/hermit/uhyve/uhyve.rs index e41bf3062..da39d1cb2 100644 --- a/tools/hermit_proxy/src/hermit/uhyve/uhyve.rs +++ b/tools/hermit_proxy/src/hermit/uhyve/uhyve.rs @@ -123,16 +123,16 @@ impl Isle for Uhyve { 0 } - fn log_file(&self) -> Result { - Err(Error::InternalError) + fn log_file(&self) -> Option { + None } - fn log_path(&self) -> Result { - Err(Error::InternalError) + fn log_path(&self) -> Option { + None } - fn cpu_path(&self) -> Result { - Err(Error::InternalError) + fn cpu_path(&self) -> Option { + None } fn run(&mut self) -> Result<()> { diff --git a/tools/hermit_proxy/src/main.rs b/tools/hermit_proxy/src/main.rs index 4b0106a21..b5495ae48 100644 --- a/tools/hermit_proxy/src/main.rs +++ b/tools/hermit_proxy/src/main.rs @@ -7,6 +7,9 @@ extern crate log; extern crate env_logger; +#[macro_use] +extern crate clap; + extern crate libc; extern crate memmap; extern crate elf; @@ -37,6 +40,14 @@ fn main() { signal::sigaction(signal::SIGTERM, &sig_action).unwrap(); } +/* let matches = clap_app!(proxy => + (version: "0.0.1") + (author: "Lorenz Schmidt ") + (about: "Allows you to start and manage HermitCore isles") + (@arg debug: -d ... "Sets the level of debugging information") + ).get_matches(); +*/ + // create the isle, wait to be available and start it env::args().skip(1).next().ok_or(error::Error::MissingBinary) .and_then(|path| hermit::new_isle(&path))