return 0;
}
-static int
+int
qemuBuildIncomingCheckProtocol(virQEMUCapsPtr qemuCaps,
const char *migrateFrom)
{
}
-static char *
+char *
qemuBuildIncomingURI(const char *migrateFrom,
int migrateFd)
{
virDomainChrSourceDefPtr monitor_chr,
bool monitor_json,
virQEMUCapsPtr qemuCaps,
- const char *migrateFrom,
- int migrateFd,
+ const char *migrateURI,
virDomainSnapshotObjPtr snapshot,
virNetDevVPortProfileOp vmop,
qemuBuildCommandLineCallbacksPtr callbacks,
int bootCD = 0, bootFloppy = 0, bootDisk = 0;
VIR_DEBUG("conn=%p driver=%p def=%p mon=%p json=%d "
- "qemuCaps=%p migrateFrom=%s migrateFD=%d "
- "snapshot=%p vmop=%d",
+ "qemuCaps=%p migrateURI=%s snapshot=%p vmop=%d",
conn, driver, def, monitor_chr, monitor_json,
- qemuCaps, migrateFrom, migrateFd, snapshot, vmop);
+ qemuCaps, migrateURI, snapshot, vmop);
virUUIDFormat(def->uuid, uuid);
goto error;
if (qemuBuildCpuArgStr(driver, def, emulator, qemuCaps,
- hostarch, &cpu, &hasHwVirt, !!migrateFrom) < 0)
+ hostarch, &cpu, &hasHwVirt, !!migrateURI) < 0)
goto error;
if (cpu) {
if (qemuBuildDomainLoaderCommandLine(cmd, def, qemuCaps) < 0)
goto error;
- if (!migrateFrom && !snapshot &&
+ if (!migrateURI && !snapshot &&
qemuDomainAlignMemorySizes(def) < 0)
goto error;
}
}
- if (migrateFrom) {
- char *migrateURI;
-
- if (qemuBuildIncomingCheckProtocol(qemuCaps, migrateFrom) < 0)
- goto error;
-
- if (STREQ(migrateFrom, "stdio") ||
- STRPREFIX(migrateFrom, "fd"))
- virCommandPassFD(cmd, migrateFd, 0);
-
- migrateURI = qemuBuildIncomingURI(migrateFrom, migrateFd);
- if (!migrateURI)
- goto error;
+ if (migrateURI)
virCommandAddArgList(cmd, "-incoming", migrateURI, NULL);
- VIR_FREE(migrateURI);
- }
/* QEMU changed its default behavior to not include the virtio balloon
* device. Explicitly request it to ensure it will be present.
virDomainChrSourceDefPtr monitor_chr,
bool monitor_json,
virQEMUCapsPtr qemuCaps,
- const char *migrateFrom,
- int migrateFd,
+ const char *migrateURI,
virDomainSnapshotObjPtr current_snapshot,
virNetDevVPortProfileOp vmop,
qemuBuildCommandLineCallbacksPtr callbacks,
virDomainDeviceInfo info,
virQEMUCapsPtr qemuCaps,
const char *devicename);
+int qemuBuildIncomingCheckProtocol(virQEMUCapsPtr qemuCaps,
+ const char *migrateFrom);
+
+char *qemuBuildIncomingURI(const char *migrateFrom,
+ int migrateFd);
+
#endif /* __QEMU_COMMAND_H__*/
if (!(cmd = qemuBuildCommandLine(conn, driver, def,
&monConfig, monitor_json, qemuCaps,
- NULL, -1, NULL,
+ NULL, NULL,
VIR_NETDEV_VPORT_PROFILE_OP_NO_OP,
&buildCommandLineCallbacks,
true,
size_t nnicindexes = 0;
int *nicindexes = NULL;
char *tmppath = NULL;
+ char *migrateURI = NULL;
VIR_DEBUG("vm=%p name=%s id=%d asyncJob=%d migrateFrom=%s stdin_fd=%d "
"stdin_path=%s snapshot=%p vmop=%d flags=0x%x",
goto error;
}
+ if (migrateFrom) {
+ if (qemuBuildIncomingCheckProtocol(priv->qemuCaps, migrateFrom) < 0)
+ goto error;
+
+ if (!(migrateURI = qemuBuildIncomingURI(migrateFrom, stdin_fd)))
+ goto error;
+ }
+
VIR_DEBUG("Building emulator command line");
if (!(cmd = qemuBuildCommandLine(conn, driver, vm->def, priv->monConfig,
priv->monJSON, priv->qemuCaps,
- migrateFrom, stdin_fd, snapshot, vmop,
+ migrateURI, snapshot, vmop,
&buildCommandLineCallbacks, false,
qemuCheckFips(),
priv->autoNodeset,
&nnicindexes, &nicindexes)))
goto error;
+ if (migrateFrom && stdin_fd != -1)
+ virCommandPassFD(cmd, stdin_fd, 0);
/*
* Create all per-domain directories in order to make sure domain
VIR_FREE(nicindexes);
VIR_FREE(nodeset);
VIR_FREE(tmppath);
+ VIR_FREE(migrateURI);
return ret;
error:
static int testCompareXMLToArgvFiles(const char *xml,
const char *cmdline,
virQEMUCapsPtr extraFlags,
- const char *migrateFrom,
- int migrateFd,
+ const char *migrateURI,
virQemuXML2ArgvTestFlags flags)
{
char *actualargv = NULL;
if (!(cmd = qemuBuildCommandLine(conn, &driver, vmdef, &monitor_chr,
(flags & FLAG_JSON), extraFlags,
- migrateFrom, migrateFd, NULL,
+ migrateURI, NULL,
VIR_NETDEV_VPORT_PROFILE_OP_NO_OP,
&testCallbacks, false,
(flags & FLAG_FIPS),
char *xml = NULL;
char *args = NULL;
unsigned int flags = info->flags;
+ char *migrateURI = NULL;
+
+ if (info->migrateFrom &&
+ !(migrateURI = qemuBuildIncomingURI(info->migrateFrom,
+ info->migrateFd)))
+ goto cleanup;
if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
abs_srcdir, info->name) < 0 ||
goto cleanup;
result = testCompareXMLToArgvFiles(xml, args, info->extraFlags,
- info->migrateFrom, info->migrateFd,
- flags);
+ migrateURI, flags);
cleanup:
+ VIR_FREE(migrateURI);
VIR_FREE(xml);
VIR_FREE(args);
return result;