[libvirt] [PATCH 09/21] New internal migration APIs with extensible parameters
Michal Privoznik
mprivozn at redhat.com
Wed Jun 19 17:13:16 UTC 2013
On 18.06.2013 16:05, Jiri Denemark wrote:
> This patch implements extensible variants of all internal migration APIs
> used for v3 migration.
> ---
> daemon/remote.c | 331 ++++++++++++++++++++++++++++++++++++++++++-
> docs/apibuild.py | 6 +
> docs/hvsupport.pl | 7 +
> src/driver.h | 67 +++++++++
> src/libvirt.c | 324 ++++++++++++++++++++++++++++++++++++++++++
> src/libvirt_internal.h | 54 +++++++
> src/libvirt_private.syms | 6 +
> src/remote/remote_protocol.x | 96 ++++++++++++-
> src/remote_protocol-structs | 107 ++++++++++++++
> 9 files changed, 996 insertions(+), 2 deletions(-)
>
> +static int
> +remoteDispatchDomainMigratePrepareTunnel3Params(
> + virNetServerPtr server ATTRIBUTE_UNUSED,
> + virNetServerClientPtr client,
> + virNetMessagePtr msg ATTRIBUTE_UNUSED,
Drop ATTRIBUTE_UNUSED as @msg is clearly used ...
> + virNetMessageErrorPtr rerr,
> + remote_domain_migrate_prepare_tunnel3_params_args *args,
> + remote_domain_migrate_prepare_tunnel3_params_ret *ret)
> +{
> + virTypedParameterPtr params = NULL;
> + int nparams = 0;
> + char *cookieout = NULL;
> + int cookieoutlen = 0;
> + int rv = -1;
> + struct daemonClientPrivate *priv =
> + virNetServerClientGetPrivateData(client);
> + virStreamPtr st = NULL;
> + daemonClientStreamPtr stream = NULL;
> +
> + if (!priv->conn) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
> + goto cleanup;
> + }
> +
> + if (!(params = remoteDeserializeTypedParameters(args->params.params_val,
> + args->params.params_len,
> + 0, &nparams)))
> + goto cleanup;
> +
> + if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)) ||
> + !(stream = daemonCreateClientStream(client, st, remoteProgram,
> + &msg->header)))
... here.
> + goto cleanup;
> +
> + if (virDomainMigratePrepareTunnel3Params(priv->conn, st, params, nparams,
> + args->cookie_in.cookie_in_val,
> + args->cookie_in.cookie_in_len,
> + &cookieout, &cookieoutlen,
> + args->flags) < 0)
> + goto cleanup;
> +
> + if (daemonAddClientStream(client, stream, false) < 0)
> + goto cleanup;
> +
> + ret->cookie_out.cookie_out_val = cookieout;
> + ret->cookie_out.cookie_out_len = cookieoutlen;
> + rv = 0;
> +
> +cleanup:
> + virTypedParamsFree(params, nparams);
> + if (rv < 0) {
> + virNetMessageSaveError(rerr);
> + VIR_FREE(cookieout);
> + if (stream) {
> + virStreamAbort(st);
> + daemonFreeClientStream(client, stream);
> + } else {
> + virStreamFree(st);
> + }
> + }
> + return rv;
> +}
> +
> +
More information about the libvir-list
mailing list