[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