if (header.compressed == QEMUD_SAVE_FORMAT_RAW) {
const char *args[] = { "cat", NULL };
- ret = qemuMonitorMigrateToCommand(vm, args, path);
+ ret = qemuMonitorMigrateToCommand(vm, 0, args, path);
} else {
const char *prog = qemudSaveCompressionTypeToString(header.compressed);
const char *args[] = {
"-c",
NULL
};
- ret = qemuMonitorMigrateToCommand(vm, args, path);
+ ret = qemuMonitorMigrateToCommand(vm, 0, args, path);
}
if (ret < 0)
paused = 1;
}
- ret = qemuMonitorMigrateToCommand(vm, args, path);
+ ret = qemuMonitorMigrateToCommand(vm, 0, args, path);
paused = 1;
cleanup:
goto cleanup;
}
- if (qemuMonitorMigrateToHost(vm, uribits->server, uribits->port) < 0)
+ if (qemuMonitorMigrateToHost(vm, 0, uribits->server, uribits->port) < 0)
goto cleanup;
/* it is also possible that the migrate didn't fail initially, but
static int qemuMonitorMigrate(const virDomainObjPtr vm,
+ int background,
const char *dest)
{
char *cmd = NULL;
char *info = NULL;
int ret = -1;
char *safedest = qemuMonitorEscapeArg(dest);
+ const char *extra;
if (!safedest) {
virReportOOMError(NULL);
return -1;
}
- if (virAsprintf(&cmd, "migrate \"%s\"", safedest) < 0) {
+ if (background)
+ extra = "-d ";
+ else
+ extra = " ";
+
+ if (virAsprintf(&cmd, "migrate %s\"%s\"", extra, safedest) < 0) {
virReportOOMError(NULL);
goto cleanup;
}
}
int qemuMonitorMigrateToHost(const virDomainObjPtr vm,
+ int background,
const char *hostname,
int port)
{
return -1;
}
- ret = qemuMonitorMigrate(vm, uri);
+ ret = qemuMonitorMigrate(vm, background, uri);
VIR_FREE(uri);
int qemuMonitorMigrateToCommand(const virDomainObjPtr vm,
+ int background,
const char * const *argv,
const char *target)
{
goto cleanup;
}
- ret = qemuMonitorMigrate(vm, dest);
+ ret = qemuMonitorMigrate(vm, background, dest);
cleanup:
VIR_FREE(safe_target);
return ret;
}
+int qemuMonitorMigrateToUnix(const virDomainObjPtr vm,
+ int background,
+ const char *unixfile)
+{
+ char *dest = NULL;
+ int ret = -1;
+
+ if (virAsprintf(&dest, "unix:%s", unixfile) < 0) {
+ virReportOOMError(NULL);
+ return -1;
+ }
+
+ ret = qemuMonitorMigrate(vm, background, dest);
+
+ VIR_FREE(dest);
+
+ return ret;
+}
+
+int qemuMonitorMigrateCancel(const virDomainObjPtr vm)
+{
+ char *info = NULL;
+
+ if (qemuMonitorCommand(vm, "migrate cancel", &info) < 0) {
+ qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ "%s", _("cannot run monitor command to cancel migration"));
+ return -1;
+ }
+ VIR_FREE(info);
+
+ return 0;
+}
int qemuMonitorAddUSBDisk(const virDomainObjPtr vm,
const char *path)
unsigned long long *total);
int qemuMonitorMigrateToHost(const virDomainObjPtr vm,
+ int background,
const char *hostname,
int port);
int qemuMonitorMigrateToCommand(const virDomainObjPtr vm,
+ int background,
const char * const *argv,
const char *target);
+int qemuMonitorMigrateToUnix(const virDomainObjPtr vm,
+ int background,
+ const char *unixfile);
+
+int qemuMonitorMigrateCancel(const virDomainObjPtr vm);
+
/* XXX disk driver type eg, qcow/etc.
* XXX cache mode