mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
43b99fc4c0
This patch adds instrumentation that will allow hypervisor drivers to fill and validate domain and device definitions after parsed by the XML parser. With this patch, after the XML is parsed, a callback to the driver is issued requesting 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. Two callback pointers are stored in the new virDomainXMLConf object: * virDomainDeviceDefPostParseCallback (devicesPostParseCallback) - 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. * virDomainDefPostParseCallback, (domainPostParseCallback) - A callback that is meant to process the domain config after it's parsed. A virDomainDefPtr is passed along with virCaps. Both types of callbacks support arbitrary opaque data passed for the callback functions. Errors may be reported in those callbacks resulting in a XML parsing failure.
87 lines
2.5 KiB
C
87 lines
2.5 KiB
C
#include <config.h>
|
|
|
|
#include <sys/utsname.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "testutilsxen.h"
|
|
#include "domain_conf.h"
|
|
|
|
static int testXenDefaultConsoleType(const char *ostype,
|
|
virArch arch ATTRIBUTE_UNUSED)
|
|
{
|
|
if (STREQ(ostype, "hvm"))
|
|
return VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL;
|
|
else
|
|
return VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN;
|
|
}
|
|
|
|
virDomainXMLOptionPtr
|
|
testXenXMLConfInit(void)
|
|
{
|
|
return virDomainXMLOptionNew(NULL, NULL, NULL);
|
|
}
|
|
|
|
virCapsPtr testXenCapsInit(void) {
|
|
struct utsname utsname;
|
|
virCapsPtr caps;
|
|
virCapsGuestPtr guest;
|
|
virCapsGuestMachinePtr *machines;
|
|
int nmachines;
|
|
static const char *const x86_machines[] = {
|
|
"xenfv"
|
|
};
|
|
static const char *const xen_machines[] = {
|
|
"xenpv"
|
|
};
|
|
|
|
uname(&utsname);
|
|
if ((caps = virCapabilitiesNew(VIR_ARCH_I686,
|
|
0, 0)) == NULL)
|
|
return NULL;
|
|
|
|
caps->defaultConsoleTargetType = testXenDefaultConsoleType;
|
|
|
|
nmachines = ARRAY_CARDINALITY(x86_machines);
|
|
if ((machines = virCapabilitiesAllocMachines(x86_machines, nmachines)) == NULL)
|
|
goto cleanup;
|
|
|
|
if ((guest = virCapabilitiesAddGuest(caps, "hvm", VIR_ARCH_I686,
|
|
"/usr/lib/xen/bin/qemu-dm", NULL,
|
|
nmachines, machines)) == NULL)
|
|
goto cleanup;
|
|
machines = NULL;
|
|
|
|
if (virCapabilitiesAddGuestDomain(guest,
|
|
"xen",
|
|
NULL,
|
|
NULL,
|
|
0,
|
|
NULL) == NULL)
|
|
goto cleanup;
|
|
|
|
nmachines = ARRAY_CARDINALITY(xen_machines);
|
|
if ((machines = virCapabilitiesAllocMachines(xen_machines, nmachines)) == NULL)
|
|
goto cleanup;
|
|
|
|
if ((guest = virCapabilitiesAddGuest(caps, "xen", VIR_ARCH_I686,
|
|
"/usr/lib/xen/bin/qemu-dm", NULL,
|
|
nmachines, machines)) == NULL)
|
|
goto cleanup;
|
|
machines = NULL;
|
|
|
|
if (virCapabilitiesAddGuestDomain(guest,
|
|
"xen",
|
|
NULL,
|
|
NULL,
|
|
0,
|
|
NULL) == NULL)
|
|
goto cleanup;
|
|
|
|
return caps;
|
|
|
|
cleanup:
|
|
virCapabilitiesFreeMachines(machines, nmachines);
|
|
virObjectUnref(caps);
|
|
return NULL;
|
|
}
|