*/
ret = qemuMigrationSrcPerform(driver, dom->conn, vm, NULL,
NULL, dconnuri, uri, NULL, NULL, 0, NULL, 0,
- compression, migParams, cookie, cookielen,
+ migParams, cookie, cookielen,
NULL, NULL, /* No output cookies in v2 */
flags, dname, resource, false);
ret = qemuMigrationSrcPerform(driver, dom->conn, vm, xmlin, NULL,
dconnuri, uri, NULL, NULL, 0, NULL, 0,
- compression, migParams,
+ migParams,
cookiein, cookieinlen,
cookieout, cookieoutlen,
flags, dname, resource, true);
ret = qemuMigrationSrcPerform(driver, dom->conn, vm, dom_xml, persist_xml,
dconnuri, uri, graphicsuri, listenAddress,
nmigrate_disks, migrate_disks, nbdPort,
- compression, migParams,
+ migParams,
cookiein, cookieinlen, cookieout, cookieoutlen,
flags, dname, bandwidth, true);
cleanup:
size_t nmigrate_disks,
const char **migrate_disks,
int nbdPort,
- qemuMigrationCompressionPtr compression,
qemuMigrationParamsPtr migParams,
unsigned long long bandwidth,
bool useParams,
nbdPort) < 0)
goto cleanup;
- if (qemuMigrationAnyCompressionDump(compression, ¶ms, &nparams,
- &maxparams, &flags) < 0)
+ if (qemuMigrationParamsDump(migParams, ¶ms, &nparams,
+ &maxparams, &flags) < 0)
goto cleanup;
}
size_t nmigrate_disks,
const char **migrate_disks,
int nbdPort,
- qemuMigrationCompressionPtr compression,
qemuMigrationParamsPtr migParams,
unsigned long flags,
const char *dname,
ret = qemuMigrationSrcPerformPeer2Peer3(driver, sconn, dconn, dconnuri, vm, xmlin,
persist_xml, dname, uri, graphicsuri,
listenAddress, nmigrate_disks, migrate_disks,
- nbdPort, compression, migParams, resource,
+ nbdPort, migParams, resource,
useParams, flags);
} else {
ret = qemuMigrationSrcPerformPeer2Peer2(driver, sconn, dconn, vm,
size_t nmigrate_disks,
const char **migrate_disks,
int nbdPort,
- qemuMigrationCompressionPtr compression,
qemuMigrationParamsPtr migParams,
const char *cookiein,
int cookieinlen,
ret = qemuMigrationSrcPerformPeer2Peer(driver, conn, vm, xmlin, persist_xml,
dconnuri, uri, graphicsuri, listenAddress,
nmigrate_disks, migrate_disks, nbdPort,
- compression, migParams, flags, dname, resource,
+ migParams, flags, dname, resource,
&v3proto);
} else {
qemuMigrationJobSetPhase(driver, vm, QEMU_MIGRATION_PHASE_PERFORM2);
size_t nmigrate_disks,
const char **migrate_disks,
int nbdPort,
- qemuMigrationCompressionPtr compression,
qemuMigrationParamsPtr migParams,
const char *cookiein,
int cookieinlen,
return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, persist_xml, dconnuri, uri,
graphicsuri, listenAddress,
nmigrate_disks, migrate_disks, nbdPort,
- compression, migParams,
+ migParams,
cookiein, cookieinlen,
cookieout, cookieoutlen,
flags, dname, resource, v3proto);
return qemuMigrationSrcPerformJob(driver, conn, vm, xmlin, persist_xml, NULL,
uri, graphicsuri, listenAddress,
nmigrate_disks, migrate_disks, nbdPort,
- compression, migParams,
+ migParams,
cookiein, cookieinlen,
cookieout, cookieoutlen, flags,
dname, resource, v3proto);
size_t nmigrate_disks,
const char **migrate_disks,
int nbdPort,
- qemuMigrationCompressionPtr compression,
qemuMigrationParamsPtr migParams,
const char *cookiein,
int cookieinlen,
#define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate"
struct _qemuMigrationParams {
+ unsigned long long compMethods; /* bit-wise OR of qemuMigrationCompressMethod */
virBitmapPtr caps;
qemuMonitorMigrationParams params;
};
ignore_value(virBitmapSetBit(migParams->caps,
QEMU_MONITOR_MIGRATION_CAPS_COMPRESS));
+ migParams->compMethods = compression->methods;
+
migParams->params.compressLevel_set = compression->level_set;
migParams->params.compressLevel = compression->level;
}
int
-qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression,
- virTypedParameterPtr *params,
- int *nparams,
- int *maxparams,
- unsigned long *flags)
+qemuMigrationParamsDump(qemuMigrationParamsPtr migParams,
+ virTypedParameterPtr *params,
+ int *nparams,
+ int *maxparams,
+ unsigned long *flags)
{
size_t i;
- if (compression->methods == 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE &&
- !compression->xbzrle_cache_set) {
+ if (migParams->compMethods == 1ULL << QEMU_MIGRATION_COMPRESS_XBZRLE &&
+ !migParams->params.xbzrleCacheSize_set) {
*flags |= VIR_MIGRATE_COMPRESSED;
return 0;
}
for (i = 0; i < QEMU_MIGRATION_COMPRESS_LAST; ++i) {
- if ((compression->methods & (1ULL << i)) &&
+ if ((migParams->compMethods & (1ULL << i)) &&
virTypedParamsAddString(params, nparams, maxparams,
VIR_MIGRATE_PARAM_COMPRESSION,
qemuMigrationCompressMethodTypeToString(i)) < 0)
return -1;
}
- if (compression->level_set &&
- virTypedParamsAddInt(params, nparams, maxparams,
- VIR_MIGRATE_PARAM_COMPRESSION_MT_LEVEL,
- compression->level) < 0)
- return -1;
-
- if (compression->threads_set &&
- virTypedParamsAddInt(params, nparams, maxparams,
- VIR_MIGRATE_PARAM_COMPRESSION_MT_THREADS,
- compression->threads) < 0)
- return -1;
+#define SET(API, PARAM, VAR) \
+ do { \
+ if (migParams->params.VAR ## _set && \
+ API(params, nparams, maxparams, VIR_MIGRATE_PARAM_ ## PARAM, \
+ migParams->params.VAR) < 0) \
+ return -1; \
+ } while (0)
- if (compression->dthreads_set &&
- virTypedParamsAddInt(params, nparams, maxparams,
- VIR_MIGRATE_PARAM_COMPRESSION_MT_DTHREADS,
- compression->dthreads) < 0)
- return -1;
+ SET(virTypedParamsAddInt, COMPRESSION_MT_LEVEL, compressLevel);
+ SET(virTypedParamsAddInt, COMPRESSION_MT_THREADS, compressThreads);
+ SET(virTypedParamsAddInt, COMPRESSION_MT_DTHREADS, decompressThreads);
+ SET(virTypedParamsAddULLong, COMPRESSION_XBZRLE_CACHE, xbzrleCacheSize);
- if (compression->xbzrle_cache_set &&
- virTypedParamsAddULLong(params, nparams, maxparams,
- VIR_MIGRATE_PARAM_COMPRESSION_XBZRLE_CACHE,
- compression->xbzrle_cache) < 0)
- return -1;
+#undef SET
return 0;
}
int nparams,
unsigned long flags);
int
-qemuMigrationAnyCompressionDump(qemuMigrationCompressionPtr compression,
- virTypedParameterPtr *params,
- int *nparams,
- int *maxparams,
- unsigned long *flags);
+qemuMigrationParamsDump(qemuMigrationParamsPtr migParams,
+ virTypedParameterPtr *params,
+ int *nparams,
+ int *maxparams,
+ unsigned long *flags);
void
qemuMigrationParamsFree(qemuMigrationParamsPtr migParams);