s/migrateURI/migrateHost/ in Subject. On Tue, May 20, 2014 at 14:08:05 +0800, Chen Fan wrote: > For now, we set the migration URI via command line '--migrate_uri' or > construct the URI by looking up the dest host's hostname which could be > solved by DNS automatically. > > But in cases the dest host have two or more NICs to reach, we may need to > send the migration data over a specific NIC which is different from the > automatically resloved one for some reason like performance, security, etc. > thus we must explicitly specify the migrateuri in command line everytime, > but it is too troublesome if there are many such hosts(and don't forget > virt-manager). > > This patch adds a configuration file option on dest host to save the > default value set which can be specified to a migration hostname or > one of this host's addresses used for transferring data, thus user doesn't > boring to specify it in command line everytime. > > Signed-off-by: Chen Fan <chen.fan.fnst@xxxxxxxxxxxxxx> > --- > > v4-v5: using "migrate_host" instead of "migrate_uri" configuration. Yeah, that's the best solution which I wanted to suggest in a discussion on v4 but I failed to actually send that email. Fortunately, Daniel suggested the same :-) Although I'd call it "migration_host" to be consistent with existing migration_address, migration_port_min, and migration_port_max. > > src/qemu/qemu.conf | 7 ++++++- > src/qemu/qemu_conf.c | 1 + > src/qemu/qemu_conf.h | 1 + > src/qemu/qemu_migration.c | 25 +++++++++++++++++++++---- > 4 files changed, 29 insertions(+), 5 deletions(-) src/qemu/libvirtd_qemu.aug and src/qemu/test_libvirtd_qemu.aug.in also need to be updated with the new configuration option. > > diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf > index f0e802f..421efc4 100644 > --- a/src/qemu/qemu.conf > +++ b/src/qemu/qemu.conf > @@ -449,7 +449,12 @@ > # > #seccomp_sandbox = 1 > > - > +# Override the migration hostname for transfering the migration data. By > +# default, the migrate hostname is set to the host's configured hostname. > +# This can be used to override the default value set by a migration > +# hostname or an IP address of the host machine. both IPv4 and IPv6 > +# addresses are accepted. > +#migrate_host = "localhost" How about: # The default hostname or IP address which will be used by a migration # source for transferring migration data to this host. The migration # source has to be able to resolve this hostname and connect to it so # setting "localhost" will not work. By default, the host's configured # hostname is used. #migration_host = "host.example.com" > > # Override the listen address for all incoming migrations. Defaults to > # 0.0.0.0, or :: if both host and qemu are capable of IPv6. > diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c > index 198ee2f..391fc57 100644 > --- a/src/qemu/qemu_conf.c > +++ b/src/qemu/qemu_conf.c > @@ -574,6 +574,7 @@ int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg, > > GET_VALUE_LONG("seccomp_sandbox", cfg->seccompSandbox); > > + GET_VALUE_STR("migrate_host", cfg->migrateHost); s/migrate_host/migration_host/ > GET_VALUE_STR("migration_address", cfg->migrationAddress); > > ret = 0; > diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h > index a36ea63..8e872b9 100644 > --- a/src/qemu/qemu_conf.h > +++ b/src/qemu/qemu_conf.h > @@ -163,6 +163,7 @@ struct _virQEMUDriverConfig { > > int seccompSandbox; > > + char *migrateHost; > /* The default for -incoming */ > char *migrationAddress; > int migrationPortMin; > diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c > index a9f7fea..963d1ef 100644 > --- a/src/qemu/qemu_migration.c > +++ b/src/qemu/qemu_migration.c > @@ -2639,6 +2639,8 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, > int ret = -1; > virURIPtr uri = NULL; > bool well_formed_uri = true; > + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); > + const char *migrateHost = cfg->migrateHost; > > VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, " > "cookieout=%p, cookieoutlen=%p, uri_in=%s, uri_out=%p, " > @@ -2652,8 +2654,9 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, > /* The URI passed in may be NULL or a string "tcp://somehostname:port". > * > * If the URI passed in is NULL then we allocate a port number > - * from our pool of port numbers and return a URI of > - * "tcp://ourhostname:port". > + * from our pool of port numbers, and if the migrateHost is configured, > + * we return a URI of "tcp://migrateHost:port", otherwise return a URI > + * of "tcp://ourhostname:port". > * > * If the URI passed in is not NULL then we try to parse out the > * port number and use that (note that the hostname is assumed > @@ -2663,8 +2666,21 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, > if (virPortAllocatorAcquire(driver->migrationPorts, &port) < 0) > goto cleanup; > > - if ((hostname = virGetHostname()) == NULL) > - goto cleanup; > + if (migrateHost != NULL) { > + if (virSocketAddrIsNumeric(migrateHost)) { > + /* migrateHost is numeric IPv4 or IPv6 */ > + if (virSocketAddrParse(NULL, migrateHost, AF_UNSPEC) < 0) > + goto cleanup; > + } else { > + /* migrateHost is a hostname */ > + } I think if (virSocketAddrIsNumeric(migrateHost) && virSocketAddrParse(NULL, migrateHost, AF_UNSPEC) < 0) goto cleanup; is self-explaining. > + > + if (VIR_STRDUP(hostname, migrateHost) < 0) > + goto cleanup; > + } else { > + if ((hostname = virGetHostname()) == NULL) > + goto cleanup; > + } > > if (STRPREFIX(hostname, "localhost")) { > virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > @@ -2746,6 +2762,7 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, > cleanup: > virURIFree(uri); > VIR_FREE(hostname); > + virObjectUnref(cfg); > if (ret != 0) { > VIR_FREE(*uri_out); > if (autoPort) That said, I suggest to squash in the attached patch. Jirka diff --git i/src/qemu/libvirtd_qemu.aug w/src/qemu/libvirtd_qemu.aug index e985d22..e7db7fe 100644 --- i/src/qemu/libvirtd_qemu.aug +++ w/src/qemu/libvirtd_qemu.aug @@ -84,6 +84,7 @@ module Libvirtd_qemu = let network_entry = str_entry "migration_address" | int_entry "migration_port_min" | int_entry "migration_port_max" + | str_entry "migration_host" let log_entry = bool_entry "log_timestamp" diff --git i/src/qemu/qemu.conf w/src/qemu/qemu.conf index e9c2402..18ce2a8 100644 --- i/src/qemu/qemu.conf +++ w/src/qemu/qemu.conf @@ -449,18 +449,20 @@ # #seccomp_sandbox = 1 -# Override the migration hostname for transfering the migration data. By -# default, the migrate hostname is set to the host's configured hostname. -# This can be used to override the default value set by a migration -# hostname or an IP address of the host machine. both IPv4 and IPv6 -# addresses are accepted. -#migrate_host = "localhost" # Override the listen address for all incoming migrations. Defaults to # 0.0.0.0, or :: if both host and qemu are capable of IPv6. #migration_address = "127.0.0.1" +# The default hostname or IP address which will be used by a migration +# source for transferring migration data to this host. The migration +# source has to be able to resolve this hostname and connect to it so +# setting "localhost" will not work. By default, the host's configured +# hostname is used. +#migration_host = "host.example.com" + + # Override the port range used for incoming migrations. # # Minimum must be greater than 0, however when QEMU is not running as root, diff --git i/src/qemu/qemu_conf.c w/src/qemu/qemu_conf.c index 65807ea..f273056 100644 --- i/src/qemu/qemu_conf.c +++ w/src/qemu/qemu_conf.c @@ -576,7 +576,7 @@ int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg, GET_VALUE_LONG("seccomp_sandbox", cfg->seccompSandbox); - GET_VALUE_STR("migrate_host", cfg->migrateHost); + GET_VALUE_STR("migration_host", cfg->migrateHost); GET_VALUE_STR("migration_address", cfg->migrationAddress); GET_VALUE_BOOL("log_timestamp", cfg->logTimestamp); diff --git i/src/qemu/qemu_migration.c w/src/qemu/qemu_migration.c index bca6585..d6271fb 100644 --- i/src/qemu/qemu_migration.c +++ w/src/qemu/qemu_migration.c @@ -2668,13 +2668,9 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, goto cleanup; if (migrateHost != NULL) { - if (virSocketAddrIsNumeric(migrateHost)) { - /* migrateHost is numeric IPv4 or IPv6 */ - if (virSocketAddrParse(NULL, migrateHost, AF_UNSPEC) < 0) - goto cleanup; - } else { - /* migrateHost is a hostname */ - } + if (virSocketAddrIsNumeric(migrateHost) && + virSocketAddrParse(NULL, migrateHost, AF_UNSPEC) < 0) + goto cleanup; if (VIR_STRDUP(hostname, migrateHost) < 0) goto cleanup; diff --git i/src/qemu/test_libvirtd_qemu.aug.in w/src/qemu/test_libvirtd_qemu.aug.in index 30a4257..7796acc 100644 --- i/src/qemu/test_libvirtd_qemu.aug.in +++ w/src/qemu/test_libvirtd_qemu.aug.in @@ -70,6 +70,7 @@ module Test_libvirtd_qemu = { "keepalive_count" = "5" } { "seccomp_sandbox" = "1" } { "migration_address" = "127.0.0.1" } +{ "migration_host" = "host.example.com" } { "migration_port_min" = "49152" } { "migration_port_max" = "49215" } { "log_timestamp" = "0" } -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list