diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 36a46da36b..3d3bec7ea7 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16557,8 +16557,10 @@ virDomainGraphicsListenGetAddress(virDomainGraphicsDefPtr def, size_t ii) virDomainGraphicsListenDefPtr listenInfo = virDomainGraphicsGetListen(def, ii, false); + /* even a network can have a listen address */ if (!listenInfo || - (listenInfo->type != VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS)) + !(listenInfo->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS || + listenInfo->type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK)) return NULL; return listenInfo->address; } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 41ad768050..a263668a8d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1720,6 +1720,7 @@ qemuDomainMigrateGraphicsRelocate(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv = vm->privateData; int ret; + char *listenAddress = cookie->graphics->listen; if (!cookie) return 0; @@ -1733,12 +1734,17 @@ qemuDomainMigrateGraphicsRelocate(virQEMUDriverPtr driver, if (cookie->graphics->type != VIR_DOMAIN_GRAPHICS_TYPE_SPICE) return 0; + if (!listenAddress || + STREQ(listenAddress, "0.0.0.0") || + STREQ(listenAddress, "::")) + listenAddress = cookie->remoteHostname; + ret = qemuDomainObjEnterMonitorAsync(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); if (ret == 0) { ret = qemuMonitorGraphicsRelocate(priv->mon, cookie->graphics->type, - cookie->remoteHostname, + listenAddress, cookie->graphics->port, cookie->graphics->tlsPort, cookie->graphics->tlsSubject);