qemu: Fix live migration over RDMA with IPv6

Using libvirt to do live migration over RDMA via IPv6 address failed.

For example:
    rhel73_host1_guest1 qemu+ssh://[deba::2222]/system --verbose
root@deba::2222's password:
error: internal error: unable to execute QEMU command 'migrate': RDMA
ERROR: could not rdma_getaddrinfo address deba

As we can see, the IPv6 address used by rdma_getaddrinfo() has only
"deba" part because we didn't properly enclose the IPv6 address in []
and passed rdma:deba::2222:49152 as the migration URI in
qemuMonitorMigrateToHost.

Signed-off-by: David Dai <zdai@linux.vnet.ibm.com>
This commit is contained in:
David Dai 2017-01-27 09:01:43 -06:00 committed by Jiri Denemark
parent 79692c3874
commit 728c0e5df4

View File

@ -2577,8 +2577,12 @@ qemuMonitorMigrateToHost(qemuMonitorPtr mon,
QEMU_CHECK_MONITOR(mon);
if (virAsprintf(&uri, "%s:%s:%d", protocol, hostname, port) < 0)
if (strchr(hostname, ':')) {
if (virAsprintf(&uri, "%s:[%s]:%d", protocol, hostname, port) < 0)
return -1;
} else if (virAsprintf(&uri, "%s:%s:%d", protocol, hostname, port) < 0) {
return -1;
}
if (mon->json)
ret = qemuMonitorJSONMigrate(mon, flags, uri);