[libvirt] [PATCH 3/7] add virAgentCommand()

Martin Kletzander mkletzan at redhat.com
Thu Aug 16 13:13:05 UTC 2012


On 08/15/2012 03:36 AM, MATSUDA Daiki wrote:
> diff --git a/include/libvirt/libvirt-qemu.h b/include/libvirt/libvirt-qemu.h
> index 013ed5a..60b83ef 100644
> --- a/include/libvirt/libvirt-qemu.h
> +++ b/include/libvirt/libvirt-qemu.h
> @@ -50,6 +50,9 @@ typedef enum {
>      VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT = 0,
>  } virDomainQemuAgentCommandTimeoutValues;
>  
> +char *virAgentCommand(virDomainPtr domain, const char *cmd,
> +                      int timeout, unsigned int flags);
> +

I wondered why this is type 'char *', when we can use 'int' as usual and
have '**result' (same as monitor command does).

> diff --git a/src/libvirt-qemu.c b/src/libvirt-qemu.c
> index 78480bb..49dfc20 100644
> --- a/src/libvirt-qemu.c
> +++ b/src/libvirt-qemu.c
> @@ -185,3 +185,54 @@ error:
>      virDispatchError(conn);
>      return NULL;
>  }
> +
> +/**
> + * virAgentCommand:
> + * @domain: a domain object
> + * @cmd: the guest agent command string
> + * @timeout: timeout seconds
> + * @flags: execution flags
> + *
> + * Execute an arbitrary Guest Agent command.
> + *
> + * Issue @cmd to the guest agent running in @domain.
> + * If @result is NULL, then don't wait for a result (and @timeout

And then I noticed that there is no @result here, so maybe you wanted to
make it that way and didn't change something?

> + * must be 0).  Otherwise, wait for @timeout seconds for a
> + * @timeout must be -2, -1, 0 or positive.
> + * VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK(-2): meaning to block forever waiting for
> + * a result.
> + * VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT(-1): use default timeout value.
> + * VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT(0): does not wait.
> + * positive value: wait for @timeout seconds
> + *
> + * Returns strings if success, NULL in failure.
> + */
> +char *
> +virAgentCommand(virDomainPtr domain,
> +                const char *cmd,
> +                int timeout,
> +                unsigned int flags)
> +{
> +    virConnectPtr conn;
> +
> +    VIR_DEBUG("domain=%p, cmd=%s, timeout=%d, flags=%x",
> +              domain, cmd, timeout, flags);
> +
> +    if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
> +        virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
> +        virDispatchError(NULL);
> +        return NULL;
> +    }
> +
> +    conn = domain->conn;
> +
> +    if (conn->driver->qemuAgentCommand) {
> +        return conn->driver->qemuAgentCommand(domain, cmd, timeout, flags);

Shouldn't this be allowed only for read-only connections?

> +    }
> +
> +    virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +
> +    /* Copy to connection error object for back compatability */

s/compatability/compatibility/

> +    virDispatchError(domain->conn);

You have 'domain->conn' in 'conn' already.

Martin




More information about the libvir-list mailing list