[libvirt] [PATCHv2 15/21] conf: Add separate defaults addition and validation for XML parsing

Michal Privoznik mprivozn at redhat.com
Thu Mar 7 16:35:19 UTC 2013


On 06.03.2013 16:37, Peter Krempa wrote:
> This patch adds instrumentation that will ultimately allow to split out
> filling of defaults and input validation from the XML parser to separate
> functions.
> 
> With this patch, after the XML is parsed, a callback to the driver is
> issued requesing to fill and validate driver specific details of the
> configuration. This allows to use sensible defaults and checks on a per
> driver basis at the time the XML is parsed.
> 
> Three callback pointers are exposed in the new virDomainXMLConf object:
> * virDeviceDefAdjustCallback - called for a single device parsed and
>                                for every single device in a domain
>                                config. A virDomainDeviceDefPtr is
>                                passed along with the domain
>                                definition and virCaps.

s/virDeviceDefAdjustCallback/virDomainDeviceDefAdjustCallback/

> * virDomainDefAdjustCallback - called if a domain definition is parsed
>                                device specific callbacks were called.
>                                A virDomainDefPtr is passed along with
>                                virCaps. There are two callbacks of this
>                                kind, one called before the devices are
>                                parsed and one after.
> 
> Errors may be reported in those callbacks resulting in a XML parsing
> failure.
> 
> Additionally internal filler and checker functions are added that are
> meant to be used forseparating the validation and defaults assignment
> code from the parser function.
> ---
>  src/conf/domain_conf.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++-
>  src/conf/domain_conf.h |  14 +++++++
>  2 files changed, 120 insertions(+), 2 deletions(-)
> 

> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 4ec3e0b..15d9838 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -1937,6 +1937,20 @@ typedef void (*virDomainXMLPrivateDataFreeFunc)(void *);
>  typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr, void *);
>  typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr, void *);
> 
> +typedef int (*virDomainDefAdjustCallback)(virDomainDefPtr def,
> +                                          virCapsPtr caps);
> +typedef int (*virDomainDeviceDefAdjustCallback)(virDomainDeviceDefPtr dev,
> +                                               virDomainDefPtr def,
> +                                               virCapsPtr caps);
> +
> +typedef struct _virDomainDefAdjustCallbacks virDomainDefAdjustCallbacks;
> +typedef virDomainDefAdjustCallbacks *virDomainDefAdjustCallbacksPtr;
> +struct _virDomainDefAdjustCallbacks {
> +    virDomainDefAdjustCallback domainBeforeDevices;
> +    virDomainDeviceDefAdjustCallback devices;
> +    virDomainDefAdjustCallback domainAfterDevices;
> +};
> +
>  typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallbacks;
>  typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacksPtr;
>  struct _virDomainXMLPrivateDataCallbacks {
> 




More information about the libvir-list mailing list