diff --git a/src/qemu/libvirtd_qemu.aug b/src/qemu/libvirtd_qemu.aug index cd13d53e3b..591d78dd95 100644 --- a/src/qemu/libvirtd_qemu.aug +++ b/src/qemu/libvirtd_qemu.aug @@ -78,6 +78,8 @@ module Libvirtd_qemu = | int_entry "keepalive_interval" | int_entry "keepalive_count" + let network_entry = str_entry "migration_address" + (* Each entry in the config is one of the following ... *) let entry = vnc_entry | spice_entry @@ -88,6 +90,7 @@ module Libvirtd_qemu = | process_entry | device_entry | rpc_entry + | network_entry let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n][^\n]*)?/ . del /\n/ "\n" ] let empty = [ label "#empty" . eol ] diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf index 5fd6263c8f..4403aaf41a 100644 --- a/src/qemu/qemu.conf +++ b/src/qemu/qemu.conf @@ -424,3 +424,9 @@ # Defaults to -1. # #seccomp_sandbox = 1 + + + +# Override the listen address for all incoming migrations. Defaults to +# 0.0.0.0 or :: in case if both host and qemu are capable of IPv6. +#migration_address = "127.0.0.1" diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 1a41caf93f..16a0b920d3 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -546,6 +546,8 @@ int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg, GET_VALUE_LONG("seccomp_sandbox", cfg->seccompSandbox); + GET_VALUE_STR("migration_address", cfg->migrationAddress); + ret = 0; cleanup: diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index da29a2aa2a..40adfcee18 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -155,6 +155,9 @@ struct _virQEMUDriverConfig { unsigned int keepAliveCount; int seccompSandbox; + + /* The default for -incoming */ + char *migrationAddress; }; /* Main driver state */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ebf5ccf017..fd61aa8420 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10262,17 +10262,18 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, unsigned int flags) { virQEMUDriverPtr driver = dconn->privateData; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); virDomainDefPtr def = NULL; const char *dom_xml = NULL; const char *dname = NULL; const char *uri_in = NULL; - const char *listenAddress = NULL; + const char *listenAddress = cfg->migrationAddress; char *origname = NULL; int ret = -1; - virCheckFlags(QEMU_MIGRATION_FLAGS, -1); + virCheckFlagsGoto(QEMU_MIGRATION_FLAGS, cleanup); if (virTypedParamsValidate(params, nparams, QEMU_MIGRATION_PARAMETERS) < 0) - return -1; + goto cleanup; if (virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_DEST_XML, @@ -10286,7 +10287,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_LISTEN_ADDRESS, &listenAddress) < 0) - return -1; + goto cleanup; if (flags & VIR_MIGRATE_TUNNELLED) { /* this is a logical error; we never should have gotten here with @@ -10313,6 +10314,7 @@ qemuDomainMigratePrepare3Params(virConnectPtr dconn, cleanup: VIR_FREE(origname); virDomainDefFree(def); + virObjectUnref(cfg); return ret; } diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in index ea770dc5a4..4b27db101a 100644 --- a/src/qemu/test_libvirtd_qemu.aug.in +++ b/src/qemu/test_libvirtd_qemu.aug.in @@ -66,3 +66,4 @@ module Test_libvirtd_qemu = { "keepalive_interval" = "5" } { "keepalive_count" = "5" } { "seccomp_sandbox" = "1" } +{ "migration_address" = "127.0.0.1" }