From 6dcc5572c13ff5a20cec38a85df82d859a54e8ea Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Fri, 11 Mar 2022 13:12:30 +0100 Subject: [PATCH] ch-remote: Add support for add-vdpa Adding the wrapping layer to be able to hotplug a vDPA device from the ch-remote tool. Signed-off-by: Sebastien Boeuf --- src/bin/ch-remote.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/bin/ch-remote.rs b/src/bin/ch-remote.rs index 00cccafd5..ba75393b4 100644 --- a/src/bin/ch-remote.rs +++ b/src/bin/ch-remote.rs @@ -28,6 +28,7 @@ enum Error { AddPmemConfig(vmm::config::Error), AddNetConfig(vmm::config::Error), AddUserDeviceConfig(vmm::config::Error), + AddVdpaConfig(vmm::config::Error), AddVsockConfig(vmm::config::Error), Restore(vmm::config::Error), } @@ -47,6 +48,7 @@ impl fmt::Display for Error { AddPmemConfig(e) => write!(f, "Error parsing persistent memory syntax: {}", e), AddNetConfig(e) => write!(f, "Error parsing network syntax: {}", e), AddUserDeviceConfig(e) => write!(f, "Error parsing user device syntax: {}", e), + AddVdpaConfig(e) => write!(f, "Error parsing vDPA device syntax: {}", e), AddVsockConfig(e) => write!(f, "Error parsing vsock syntax: {}", e), Restore(e) => write!(f, "Error parsing restore syntax: {}", e), } @@ -212,6 +214,18 @@ fn add_net_api_command(socket: &mut UnixStream, config: &str) -> Result<(), Erro .map_err(Error::ApiClient) } +fn add_vdpa_api_command(socket: &mut UnixStream, config: &str) -> Result<(), Error> { + let vdpa_config = vmm::config::VdpaConfig::parse(config).map_err(Error::AddVdpaConfig)?; + + simple_api_command( + socket, + "PUT", + "add-vdpa", + Some(&serde_json::to_string(&vdpa_config).unwrap()), + ) + .map_err(Error::ApiClient) +} + fn add_vsock_api_command(socket: &mut UnixStream, config: &str) -> Result<(), Error> { let vsock_config = vmm::config::VsockConfig::parse(config).map_err(Error::AddVsockConfig)?; @@ -376,6 +390,14 @@ fn do_command(matches: &ArgMatches) -> Result<(), Error> { .value_of("device_config") .unwrap(), ), + Some("add-vdpa") => add_vdpa_api_command( + &mut socket, + matches + .subcommand_matches("add-vdpa") + .unwrap() + .value_of("vdpa_config") + .unwrap(), + ), Some("add-vsock") => add_vsock_api_command( &mut socket, matches @@ -486,6 +508,13 @@ fn main() { .help(vmm::config::UserDeviceConfig::SYNTAX), ), ) + .subcommand( + Command::new("add-vdpa").about("Add vDPA device").arg( + Arg::new("vdpa_config") + .index(1) + .help(vmm::config::VdpaConfig::SYNTAX), + ), + ) .subcommand( Command::new("add-vsock").about("Add vsock device").arg( Arg::new("vsock_config")