mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
virCaps: get rid of emulatorRequired
This patch removes the emulatorRequired field and associated infrastructure from the virCaps object. Instead the driver specific callbacks are used as this field isn't enforced by all drivers. This patch implements the appropriate callbacks in the qemu and lxc driver and moves to check to that location.
This commit is contained in:
parent
9ea249e7d9
commit
b5def001cc
@ -935,13 +935,3 @@ virCapabilitiesGenerateMac(virCapsPtr caps,
|
||||
{
|
||||
virMacAddrGenerate(caps->macPrefix, mac);
|
||||
}
|
||||
|
||||
extern void
|
||||
virCapabilitiesSetEmulatorRequired(virCapsPtr caps) {
|
||||
caps->emulatorRequired = 1;
|
||||
}
|
||||
|
||||
extern unsigned int
|
||||
virCapabilitiesIsEmulatorRequired(virCapsPtr caps) {
|
||||
return caps->emulatorRequired;
|
||||
}
|
||||
|
@ -163,7 +163,6 @@ struct _virCaps {
|
||||
|
||||
/* Move to virDomainXMLOption later */
|
||||
unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
|
||||
unsigned int emulatorRequired : 1;
|
||||
int defaultDiskDriverType; /* enum virStorageFileFormat */
|
||||
int (*defaultConsoleTargetType)(const char *ostype, virArch guestarch);
|
||||
bool hasWideScsiBus;
|
||||
@ -186,12 +185,6 @@ extern void
|
||||
virCapabilitiesGenerateMac(virCapsPtr caps,
|
||||
virMacAddrPtr mac);
|
||||
|
||||
extern void
|
||||
virCapabilitiesSetEmulatorRequired(virCapsPtr caps);
|
||||
|
||||
extern unsigned int
|
||||
virCapabilitiesIsEmulatorRequired(virCapsPtr caps);
|
||||
|
||||
extern int
|
||||
virCapabilitiesAddHostFeature(virCapsPtr caps,
|
||||
const char *name);
|
||||
|
@ -9165,8 +9165,10 @@ virDomainLeaseRemove(virDomainDefPtr def,
|
||||
}
|
||||
|
||||
|
||||
static char *virDomainDefDefaultEmulator(virDomainDefPtr def,
|
||||
virCapsPtr caps) {
|
||||
char *
|
||||
virDomainDefGetDefaultEmulator(virDomainDefPtr def,
|
||||
virCapsPtr caps)
|
||||
{
|
||||
const char *type;
|
||||
const char *emulator;
|
||||
char *retemu;
|
||||
@ -9185,13 +9187,13 @@ static char *virDomainDefDefaultEmulator(virDomainDefPtr def,
|
||||
|
||||
if (!emulator) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("no emulator for domain %s os type %s on architecture %s"),
|
||||
_("no emulator for domain %s os type %s "
|
||||
"on architecture %s"),
|
||||
type, def->os.type, virArchToString(def->os.arch));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retemu = strdup(emulator);
|
||||
if (!retemu)
|
||||
if (!(retemu = strdup(emulator)))
|
||||
virReportOOMError();
|
||||
|
||||
return retemu;
|
||||
@ -10385,11 +10387,6 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||
}
|
||||
|
||||
def->emulator = virXPathString("string(./devices/emulator[1])", ctxt);
|
||||
if (!def->emulator && virCapabilitiesIsEmulatorRequired(caps)) {
|
||||
def->emulator = virDomainDefDefaultEmulator(def, caps);
|
||||
if (!def->emulator)
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* analysis of the disk devices */
|
||||
if ((n = virXPathNodeSet("./devices/disk", ctxt, &nodes)) < 0)
|
||||
|
@ -2476,4 +2476,6 @@ int virDomainObjListExport(virDomainObjListPtr doms,
|
||||
virDomainVcpuPinDefPtr virDomainLookupVcpuPin(virDomainDefPtr def,
|
||||
int vcpuid);
|
||||
|
||||
char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
|
||||
|
||||
#endif /* __DOMAIN_CONF_H */
|
||||
|
@ -21,9 +21,7 @@ virCapabilitiesFormatXML;
|
||||
virCapabilitiesFreeMachines;
|
||||
virCapabilitiesFreeNUMAInfo;
|
||||
virCapabilitiesGenerateMac;
|
||||
virCapabilitiesIsEmulatorRequired;
|
||||
virCapabilitiesNew;
|
||||
virCapabilitiesSetEmulatorRequired;
|
||||
virCapabilitiesSetHostCPU;
|
||||
virCapabilitiesSetMacPrefix;
|
||||
|
||||
@ -118,6 +116,7 @@ virDomainDefFormat;
|
||||
virDomainDefFormatInternal;
|
||||
virDomainDefFree;
|
||||
virDomainDefGenSecurityLabelDef;
|
||||
virDomainDefGetDefaultEmulator;
|
||||
virDomainDefGetSecurityLabelDef;
|
||||
virDomainDefParseFile;
|
||||
virDomainDefParseNode;
|
||||
|
@ -119,9 +119,6 @@ virCapsPtr lxcCapsInit(virLXCDriverPtr driver)
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* LXC Requires an emulator in the XML */
|
||||
virCapabilitiesSetEmulatorRequired(caps);
|
||||
|
||||
if (driver) {
|
||||
/* Security driver data */
|
||||
const char *doi, *model;
|
||||
@ -159,11 +156,12 @@ error:
|
||||
virDomainXMLOptionPtr
|
||||
lxcDomainXMLConfInit(void)
|
||||
{
|
||||
return virDomainXMLOptionNew(NULL,
|
||||
return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig,
|
||||
&virLXCDriverPrivateDataCallbacks,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
||||
int lxcLoadDriverConfig(virLXCDriverPtr driver)
|
||||
{
|
||||
char *filename;
|
||||
|
@ -79,3 +79,20 @@ virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks = {
|
||||
.format = virLXCDomainObjPrivateXMLFormat,
|
||||
.parse = virLXCDomainObjPrivateXMLParse,
|
||||
};
|
||||
|
||||
static int
|
||||
virLXCDomainDefPostParse(virDomainDefPtr def,
|
||||
virCapsPtr caps,
|
||||
void *opaque ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* check for emulator and create a default one if needed */
|
||||
if (!def->emulator &&
|
||||
!(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
virDomainDefParserConfig virLXCDriverDomainDefParserConfig = {
|
||||
.domainPostParseCallback = virLXCDomainDefPostParse,
|
||||
};
|
||||
|
@ -39,5 +39,6 @@ struct _virLXCDomainObjPrivate {
|
||||
};
|
||||
|
||||
extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks;
|
||||
extern virDomainDefParserConfig virLXCDriverDomainDefParserConfig;
|
||||
|
||||
#endif /* __LXC_DOMAIN_H__ */
|
||||
|
@ -909,9 +909,6 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache)
|
||||
i) < 0)
|
||||
goto error;
|
||||
|
||||
/* QEMU Requires an emulator in the XML */
|
||||
virCapabilitiesSetEmulatorRequired(caps);
|
||||
|
||||
caps->defaultConsoleTargetType = virQEMUCapsDefaultConsoleType;
|
||||
|
||||
return caps;
|
||||
|
@ -662,6 +662,20 @@ virDomainXMLNamespace virQEMUDriverDomainXMLNamespace = {
|
||||
};
|
||||
|
||||
|
||||
static int
|
||||
qemuDomainDefPostParse(virDomainDefPtr def,
|
||||
virCapsPtr caps,
|
||||
void *opaque ATTRIBUTE_UNUSED)
|
||||
{
|
||||
/* check for emulator and create a default one if needed */
|
||||
if (!def->emulator &&
|
||||
!(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
|
||||
virDomainDefPtr def ATTRIBUTE_UNUSED,
|
||||
@ -703,6 +717,7 @@ no_memory:
|
||||
|
||||
virDomainDefParserConfig virQEMUDriverDomainDefParserConfig = {
|
||||
.devicesPostParseCallback = qemuDomainDeviceDefPostParse,
|
||||
.domainPostParseCallback = qemuDomainDefPostParse,
|
||||
};
|
||||
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/libexec/libvirt_lxc</emulator>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
<source dir='/root/container'/>
|
||||
<target dir='/'/>
|
||||
|
@ -15,6 +15,7 @@
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/libexec/libvirt_lxc</emulator>
|
||||
<filesystem type='mount' accessmode='passthrough'>
|
||||
<source dir='/root/container'/>
|
||||
<target dir='/'/>
|
||||
|
Loading…
Reference in New Issue
Block a user