[libvirt] [PATCHv3 19/27] conf: Add separate defaults addition and validation for XML parsing
Daniel P. Berrange
berrange at redhat.com
Tue Mar 12 12:42:34 UTC 2013
On Mon, Mar 11, 2013 at 04:06:30PM +0100, 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:
You say three but only show two here.
> * virDomainDeviceDefAdjustCallback - 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.
> * 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.
On naming, I think s/Adjust/PostParse/ is better
> static virClassPtr virDomainXMLConfClass;
> +static void virDoaminXMLConfClassDispose(void *obj)
s/Doamin/Domain/
> +{
> + virDomainXMLConfPtr xmlconf = obj;
> +
> + if (xmlconf->adjust.privFree)
> + (xmlconf->adjust.privFree)(xmlconf->adjust.priv);
> +}
>
> static int virDomainXMLConfOnceInit(void)
> {
> if (!(virDomainXMLConfClass = virClassNew(virClassForObject(),
> "virDomainXMLConf",
> sizeof(virDomainXMLConf),
> - NULL)))
> + virDoaminXMLConfClassDispose)))
s/Doamin/Domain/
> return -1;
>
> return 0;
> @@ -2450,6 +2458,104 @@ int virDomainDeviceInfoIterate(virDomainDefPtr def,
> }
>
>
> +static int
> +virDomainDeviceDefAdjustInternal(virDomainDeviceDefPtr dev ATTRIBUTE_UNUSED,
> + virDomainDefPtr def ATTRIBUTE_UNUSED,
> + virCapsPtr caps ATTRIBUTE_UNUSED)
> +{
> + /* not in use yet */
> + return 0;
> +}
> +
> +
> +static int
> +virDomainDefAdjustInternal(virDomainDefPtr def ATTRIBUTE_UNUSED,
> + virCapsPtr caps ATTRIBUTE_UNUSED)
> +{
> + /* not in use yet */
> + return 0;
> +}
> +
> +
> +static int
> +virDomainDeviceDefAdjust(virDomainXMLConfPtr xmlconf,
> + virDomainDeviceDefPtr dev,
> + virDomainDefPtr def,
> + virCapsPtr caps)
> +{
> + int ret;
> +
> + if ((ret = virDomainDeviceDefAdjustInternal(dev, def, caps)) < 0)
> + return ret;
> +
> + if (xmlconf && xmlconf->adjust.devices) {
> + if ((ret = xmlconf->adjust.devices(dev, def, caps,
> + xmlconf->adjust.priv)) < 0)
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +
> +struct virDomainDefAdjustDeviceIteratorData {
> + virCapsPtr caps;
> + virDomainDefPtr def;
> + virDomainXMLConfPtr xmlconf;
> +};
> +
> +
> +static int
> +virDomainDefAdjustDeviceIterator(virDomainDefPtr def ATTRIBUTE_UNUSED,
> + virDomainDeviceDefPtr dev,
> + virDomainDeviceInfoPtr info ATTRIBUTE_UNUSED,
> + void *opaque)
> +{
> + struct virDomainDefAdjustDeviceIteratorData *data = opaque;
> + return virDomainDeviceDefAdjust(data->xmlconf, dev, data->def, data->caps);
> +}
> +
> +
> +static int
> +virDomainDefAdjust(virDomainXMLConfPtr xmlconf,
> + virDomainDefPtr def,
> + virCapsPtr caps)
s/Adjust/PostParse/ in this function and really all other changes here.
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list