vmm, ch-remote: Add "local" option to send-migration API

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2022-01-11 16:41:58 +00:00
parent 6e78ac1837
commit b9c260c0de
3 changed files with 19 additions and 3 deletions

View File

@ -263,9 +263,14 @@ fn receive_migration_api_command(socket: &mut UnixStream, url: &str) -> Result<(
.map_err(Error::ApiClient)
}
fn send_migration_api_command(socket: &mut UnixStream, url: &str) -> Result<(), Error> {
fn send_migration_api_command(
socket: &mut UnixStream,
url: &str,
local: bool,
) -> Result<(), Error> {
let send_migration_data = vmm::api::VmSendMigrationData {
destination_url: url.to_owned(),
local,
};
simple_api_command(
socket,
@ -402,6 +407,10 @@ fn do_command(matches: &ArgMatches) -> Result<(), Error> {
.unwrap()
.value_of("send_migration_config")
.unwrap(),
matches
.subcommand_matches("send-migration")
.unwrap()
.is_present("send_migration_local"),
),
Some("receive-migration") => receive_migration_api_command(
&mut socket,
@ -560,6 +569,11 @@ fn main() {
Arg::new("send_migration_config")
.index(1)
.help("<destination_url>"),
)
.arg(
Arg::new("send_migration_local")
.long("local")
.takes_value(false),
),
)
.subcommand(

View File

@ -195,6 +195,8 @@ pub struct VmReceiveMigrationData {
pub struct VmSendMigrationData {
/// URL to migrate the VM to
pub destination_url: String,
/// Send memory across socket without copying
pub local: bool,
}
pub enum ApiResponsePayload {

View File

@ -1140,8 +1140,8 @@ impl Vmm {
send_data_migration: VmSendMigrationData,
) -> result::Result<(), MigratableError> {
info!(
"Sending migration: destination_url = {}",
send_data_migration.destination_url
"Sending migration: destination_url = {}, local = {}",
send_data_migration.destination_url, send_data_migration.local
);
if let Some(vm) = self.vm.as_mut() {
Self::send_migration(