virDomainDeviceDefValidate(const virDomainDeviceDef *dev,
const virDomainDef *def,
unsigned int parseFlags,
- virDomainXMLOptionPtr xmlopt)
+ virDomainXMLOptionPtr xmlopt,
+ void *parseOpaque)
{
/* validate configuration only in certain places */
if (parseFlags & VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)
return 0;
if (xmlopt->config.deviceValidateCallback &&
- xmlopt->config.deviceValidateCallback(dev, def, xmlopt->config.priv))
+ xmlopt->config.deviceValidateCallback(dev, def, xmlopt->config.priv, parseOpaque))
return -1;
if (virDomainDeviceDefValidateInternal(dev, def) < 0)
{
struct virDomainDefPostParseDeviceIteratorData *data = opaque;
return virDomainDeviceDefValidate(dev, def,
- data->parseFlags, data->xmlopt);
+ data->parseFlags, data->xmlopt,
+ data->parseOpaque);
}
* @caps: driver capabilities object
* @parseFlags: virDomainDefParseFlags
* @xmlopt: XML parser option object
+ * @parseOpaque: hypervisor driver specific data for this validation run
*
* This validation function is designed to take checks of globally invalid
* configurations that the parser needs to accept so that VMs don't vanish upon
int
virDomainDefValidate(virDomainDefPtr def,
unsigned int parseFlags,
- virDomainXMLOptionPtr xmlopt)
+ virDomainXMLOptionPtr xmlopt,
+ void *parseOpaque)
{
struct virDomainDefPostParseDeviceIteratorData data = {
.xmlopt = xmlopt,
.parseFlags = parseFlags,
+ .parseOpaque = parseOpaque,
};
/* validate configuration only in certain places */
/* call the domain config callback */
if (xmlopt->config.domainValidateCallback &&
- xmlopt->config.domainValidateCallback(def, xmlopt->config.priv) < 0)
+ xmlopt->config.domainValidateCallback(def, xmlopt->config.priv, parseOpaque) < 0)
return -1;
/* iterate the devices */
return NULL;
/* validate the configuration */
- if (virDomainDeviceDefValidate(dev, def, flags, xmlopt) < 0)
+ if (virDomainDeviceDefValidate(dev, def, flags, xmlopt, parseOpaque) < 0)
return NULL;
return g_steal_pointer(&dev);
goto error;
/* validate configuration */
- if (virDomainDefValidate(obj->def, flags, xmlopt) < 0)
+ if (virDomainDefValidate(obj->def, flags, xmlopt, parseOpaque) < 0)
goto error;
return obj;
return NULL;
/* validate configuration */
- if (virDomainDefValidate(def, flags, xmlopt) < 0)
+ if (virDomainDefValidate(def, flags, xmlopt, parseOpaque) < 0)
return NULL;
return g_steal_pointer(&def);
* for configurations that were previously accepted. This shall not modify the
* config. */
typedef int (*virDomainDefValidateCallback)(const virDomainDef *def,
- void *opaque);
+ void *opaque,
+ void *parseOpaque);
/* Called once per device, for adjusting per-device settings while
* leaving the overall domain otherwise unchanged. */
typedef int (*virDomainDeviceDefValidateCallback)(const virDomainDeviceDef *dev,
const virDomainDef *def,
- void *opaque);
+ void *opaque,
+ void *parseOpaque);
struct _virDomainDefParserConfig {
/* driver domain definition callbacks */
int virDomainDefValidate(virDomainDefPtr def,
unsigned int parseFlags,
- virDomainXMLOptionPtr xmlopt);
+ virDomainXMLOptionPtr xmlopt,
+ void *parseOpaque);
int
virDomainActualNetDefValidate(const virDomainNetDef *net);