[libvirt] [PATCH 3/6] Introduce virDomainGetControlInfo API
Federico Simoncelli
federico.simoncelli at gmail.com
Thu Jun 9 15:08:14 UTC 2011
Hi Jiri,
I don't see the libvirt_virDomainGetControlInfo implementation in
libvirt-override.c.
$ nm -D python/.libs/libvirtmod.so | grep virDomainGetControlInfo
(empty)
Is the python binding postponed to a future patch?
--
Federico
On Tue, Jun 7, 2011 at 3:01 PM, Jiri Denemark <jdenemar at redhat.com> wrote:
> The API can be used to query current state of an interface to VMM used
> to control a domain. In QEMU world this translates into monitor
> connection.
> ---
> include/libvirt/libvirt.h.in | 40 ++++++++++++++++++++++++++++++++
> python/generator.py | 1 +
> python/libvirt-override-api.xml | 6 +++++
> src/driver.h | 5 ++++
> src/libvirt.c | 48 +++++++++++++++++++++++++++++++++++++++
> src/libvirt_public.syms | 5 ++++
> 6 files changed, 105 insertions(+), 0 deletions(-)
>
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index df213f1..1454ca0 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -141,6 +141,43 @@ typedef enum {
> VIR_DOMAIN_CRASHED_UNKNOWN = 0, /* crashed for unknown reason */
> } virDomainCrashedReason;
>
> +
> +/**
> + * virDomainControlState:
> + *
> + * Current state of a control interface to the domain.
> + */
> +typedef enum {
> + VIR_DOMAIN_CONTROL_OK = 0, /* operational, ready to accept commands */
> + VIR_DOMAIN_CONTROL_JOB = 1, /* background job is running (can be
> + monitored by virDomainGetJobInfo); only
> + limited set of commands may be allowed */
> + VIR_DOMAIN_CONTROL_OCCUPIED = 2, /* occupied by a running command */
> + VIR_DOMAIN_CONTROL_ERROR = 3, /* unusable, domain cannot be fully operated */
> +} virDomainControlState;
> +
> +/**
> + * virDomainControlInfo:
> + *
> + * Structure filled in by virDomainGetControlInfo and providing details about
> + * current state of control interface to a domain.
> + */
> +typedef struct _virDomainControlInfo virDomainControlInfo;
> +struct _virDomainControlInfo {
> + unsigned int state; /* control state, one of virDomainControlState */
> + unsigned int details; /* state details, currently 0 */
> + unsigned long long stateTime; /* for how long (in msec) control interface
> + has been in current state (except for OK
> + and ERROR states) */
> +};
> +
> +/**
> + * virDomainControlInfoPtr:
> + *
> + * Pointer to virDomainControlInfo structure.
> + */
> +typedef virDomainControlInfo *virDomainControlInfoPtr;
> +
> /**
> * virDomainModificationImpact:
> *
> @@ -781,6 +818,9 @@ int virDomainGetState (virDomainPtr domain,
> int *state,
> int *reason,
> unsigned int flags);
> +int virDomainGetControlInfo (virDomainPtr domain,
> + virDomainControlInfoPtr info,
> + unsigned int flags);
>
> /*
> * Return scheduler type in effect 'sedf', 'credit', 'linux'
> diff --git a/python/generator.py b/python/generator.py
> index 7c38fdd..4e3e9fa 100755
> --- a/python/generator.py
> +++ b/python/generator.py
> @@ -306,6 +306,7 @@ skip_impl = (
> 'virGetLastError',
> 'virDomainGetInfo',
> 'virDomainGetState',
> + 'virDomainGetControlInfo',
> 'virDomainGetBlockInfo',
> 'virDomainGetJobInfo',
> 'virNodeGetInfo',
> diff --git a/python/libvirt-override-api.xml b/python/libvirt-override-api.xml
> index ec08e69..01207d6 100644
> --- a/python/libvirt-override-api.xml
> +++ b/python/libvirt-override-api.xml
> @@ -54,6 +54,12 @@
> <arg name='domain' type='virDomainPtr' info='a domain object'/>
> <arg name='flags' type='unsigned int' info='additional flags'/>
> </function>
> + <function name='virDomainGetControlInfo' file='python'>
> + <info>Extract details about current state of control interface to a domain.</info>
> + <return type='int *' info='the list of information or None in case of error'/>
> + <arg name='domain' type='virDomainPtr' info='a domain object'/>
> + <arg name='flags' type='unsigned int' info='additional flags'/>
> + </function>
> <function name='virDomainGetBlockInfo' file='python'>
> <info>Extract information about a domain block device size</info>
> <return type='int *' info='the list of information or None in case of error'/>
> diff --git a/src/driver.h b/src/driver.h
> index 5df798a..ca49b08 100644
> --- a/src/driver.h
> +++ b/src/driver.h
> @@ -171,6 +171,10 @@ typedef int
> int *reason,
> unsigned int flags);
> typedef int
> + (*virDrvDomainGetControlInfo) (virDomainPtr domain,
> + virDomainControlInfoPtr info,
> + unsigned int flags);
> +typedef int
> (*virDrvDomainSave) (virDomainPtr domain,
> const char *to);
> typedef int
> @@ -663,6 +667,7 @@ struct _virDriver {
> virDrvDomainGetBlkioParameters domainGetBlkioParameters;
> virDrvDomainGetInfo domainGetInfo;
> virDrvDomainGetState domainGetState;
> + virDrvDomainGetControlInfo domainGetControlInfo;
> virDrvDomainSave domainSave;
> virDrvDomainRestore domainRestore;
> virDrvDomainCoreDump domainCoreDump;
> diff --git a/src/libvirt.c b/src/libvirt.c
> index 18c4e08..81dd879 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -3261,6 +3261,54 @@ error:
> }
>
> /**
> + * virDomainGetControlInfo:
> + * @domain: a domain object
> + * @info: pointer to a virDomainControlInfo structure allocated by the user
> + * @flags: additional flags, 0 for now
> + *
> + * Extract details about current state of control interface to a domain.
> + *
> + * Returns 0 in case of success and -1 in case of failure.
> + */
> +int
> +virDomainGetControlInfo(virDomainPtr domain,
> + virDomainControlInfoPtr info,
> + unsigned int flags)
> +{
> + virConnectPtr conn;
> +
> + VIR_DOMAIN_DEBUG(domain, "info=%p", info);
> +
> + virResetLastError();
> +
> + if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
> + virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
> + virDispatchError(NULL);
> + return -1;
> + }
> +
> + if (!info) {
> + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> + goto error;
> + }
> +
> + conn = domain->conn;
> + if (conn->driver->domainGetControlInfo) {
> + int ret;
> + ret = conn->driver->domainGetControlInfo(domain, info, flags);
> + if (ret < 0)
> + goto error;
> + return ret;
> + }
> +
> + virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +
> +error:
> + virDispatchError(domain->conn);
> + return -1;
> +}
> +
> +/**
> * virDomainGetXMLDesc:
> * @domain: a domain object
> * @flags: an OR'ed set of virDomainXMLFlags
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index 4d4299a..0e55097 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -450,4 +450,9 @@ LIBVIRT_0.9.2 {
> virInterfaceChangeRollback;
> } LIBVIRT_0.9.0;
>
> +LIBVIRT_0.9.3 {
> + global:
> + virDomainGetControlInfo;
> +} LIBVIRT_0.9.2;
> +
> # .... define new API here using predicted next version number ....
> --
> 1.7.5.3
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list