提交 b5def001 编写于 作者: P Peter Krempa

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.
上级 9ea249e7
...@@ -935,13 +935,3 @@ virCapabilitiesGenerateMac(virCapsPtr caps, ...@@ -935,13 +935,3 @@ virCapabilitiesGenerateMac(virCapsPtr caps,
{ {
virMacAddrGenerate(caps->macPrefix, mac); 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 { ...@@ -163,7 +163,6 @@ struct _virCaps {
/* Move to virDomainXMLOption later */ /* Move to virDomainXMLOption later */
unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN]; unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
unsigned int emulatorRequired : 1;
int defaultDiskDriverType; /* enum virStorageFileFormat */ int defaultDiskDriverType; /* enum virStorageFileFormat */
int (*defaultConsoleTargetType)(const char *ostype, virArch guestarch); int (*defaultConsoleTargetType)(const char *ostype, virArch guestarch);
bool hasWideScsiBus; bool hasWideScsiBus;
...@@ -186,12 +185,6 @@ extern void ...@@ -186,12 +185,6 @@ extern void
virCapabilitiesGenerateMac(virCapsPtr caps, virCapabilitiesGenerateMac(virCapsPtr caps,
virMacAddrPtr mac); virMacAddrPtr mac);
extern void
virCapabilitiesSetEmulatorRequired(virCapsPtr caps);
extern unsigned int
virCapabilitiesIsEmulatorRequired(virCapsPtr caps);
extern int extern int
virCapabilitiesAddHostFeature(virCapsPtr caps, virCapabilitiesAddHostFeature(virCapsPtr caps,
const char *name); const char *name);
......
...@@ -9165,8 +9165,10 @@ virDomainLeaseRemove(virDomainDefPtr def, ...@@ -9165,8 +9165,10 @@ virDomainLeaseRemove(virDomainDefPtr def,
} }
static char *virDomainDefDefaultEmulator(virDomainDefPtr def, char *
virCapsPtr caps) { virDomainDefGetDefaultEmulator(virDomainDefPtr def,
virCapsPtr caps)
{
const char *type; const char *type;
const char *emulator; const char *emulator;
char *retemu; char *retemu;
...@@ -9185,13 +9187,13 @@ static char *virDomainDefDefaultEmulator(virDomainDefPtr def, ...@@ -9185,13 +9187,13 @@ static char *virDomainDefDefaultEmulator(virDomainDefPtr def,
if (!emulator) { if (!emulator) {
virReportError(VIR_ERR_INTERNAL_ERROR, 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)); type, def->os.type, virArchToString(def->os.arch));
return NULL; return NULL;
} }
retemu = strdup(emulator); if (!(retemu = strdup(emulator)))
if (!retemu)
virReportOOMError(); virReportOOMError();
return retemu; return retemu;
...@@ -10385,11 +10387,6 @@ virDomainDefParseXML(xmlDocPtr xml, ...@@ -10385,11 +10387,6 @@ virDomainDefParseXML(xmlDocPtr xml,
} }
def->emulator = virXPathString("string(./devices/emulator[1])", ctxt); 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 */ /* analysis of the disk devices */
if ((n = virXPathNodeSet("./devices/disk", ctxt, &nodes)) < 0) if ((n = virXPathNodeSet("./devices/disk", ctxt, &nodes)) < 0)
......
...@@ -2476,4 +2476,6 @@ int virDomainObjListExport(virDomainObjListPtr doms, ...@@ -2476,4 +2476,6 @@ int virDomainObjListExport(virDomainObjListPtr doms,
virDomainVcpuPinDefPtr virDomainLookupVcpuPin(virDomainDefPtr def, virDomainVcpuPinDefPtr virDomainLookupVcpuPin(virDomainDefPtr def,
int vcpuid); int vcpuid);
char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
#endif /* __DOMAIN_CONF_H */ #endif /* __DOMAIN_CONF_H */
...@@ -21,9 +21,7 @@ virCapabilitiesFormatXML; ...@@ -21,9 +21,7 @@ virCapabilitiesFormatXML;
virCapabilitiesFreeMachines; virCapabilitiesFreeMachines;
virCapabilitiesFreeNUMAInfo; virCapabilitiesFreeNUMAInfo;
virCapabilitiesGenerateMac; virCapabilitiesGenerateMac;
virCapabilitiesIsEmulatorRequired;
virCapabilitiesNew; virCapabilitiesNew;
virCapabilitiesSetEmulatorRequired;
virCapabilitiesSetHostCPU; virCapabilitiesSetHostCPU;
virCapabilitiesSetMacPrefix; virCapabilitiesSetMacPrefix;
...@@ -118,6 +116,7 @@ virDomainDefFormat; ...@@ -118,6 +116,7 @@ virDomainDefFormat;
virDomainDefFormatInternal; virDomainDefFormatInternal;
virDomainDefFree; virDomainDefFree;
virDomainDefGenSecurityLabelDef; virDomainDefGenSecurityLabelDef;
virDomainDefGetDefaultEmulator;
virDomainDefGetSecurityLabelDef; virDomainDefGetSecurityLabelDef;
virDomainDefParseFile; virDomainDefParseFile;
virDomainDefParseNode; virDomainDefParseNode;
......
...@@ -119,9 +119,6 @@ virCapsPtr lxcCapsInit(virLXCDriverPtr driver) ...@@ -119,9 +119,6 @@ virCapsPtr lxcCapsInit(virLXCDriverPtr driver)
goto error; goto error;
} }
/* LXC Requires an emulator in the XML */
virCapabilitiesSetEmulatorRequired(caps);
if (driver) { if (driver) {
/* Security driver data */ /* Security driver data */
const char *doi, *model; const char *doi, *model;
...@@ -159,11 +156,12 @@ error: ...@@ -159,11 +156,12 @@ error:
virDomainXMLOptionPtr virDomainXMLOptionPtr
lxcDomainXMLConfInit(void) lxcDomainXMLConfInit(void)
{ {
return virDomainXMLOptionNew(NULL, return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig,
&virLXCDriverPrivateDataCallbacks, &virLXCDriverPrivateDataCallbacks,
NULL); NULL);
} }
int lxcLoadDriverConfig(virLXCDriverPtr driver) int lxcLoadDriverConfig(virLXCDriverPtr driver)
{ {
char *filename; char *filename;
......
...@@ -79,3 +79,20 @@ virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks = { ...@@ -79,3 +79,20 @@ virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks = {
.format = virLXCDomainObjPrivateXMLFormat, .format = virLXCDomainObjPrivateXMLFormat,
.parse = virLXCDomainObjPrivateXMLParse, .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 { ...@@ -39,5 +39,6 @@ struct _virLXCDomainObjPrivate {
}; };
extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks; extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks;
extern virDomainDefParserConfig virLXCDriverDomainDefParserConfig;
#endif /* __LXC_DOMAIN_H__ */ #endif /* __LXC_DOMAIN_H__ */
...@@ -909,9 +909,6 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache) ...@@ -909,9 +909,6 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache)
i) < 0) i) < 0)
goto error; goto error;
/* QEMU Requires an emulator in the XML */
virCapabilitiesSetEmulatorRequired(caps);
caps->defaultConsoleTargetType = virQEMUCapsDefaultConsoleType; caps->defaultConsoleTargetType = virQEMUCapsDefaultConsoleType;
return caps; return caps;
......
...@@ -662,6 +662,20 @@ virDomainXMLNamespace virQEMUDriverDomainXMLNamespace = { ...@@ -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 static int
qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
virDomainDefPtr def ATTRIBUTE_UNUSED, virDomainDefPtr def ATTRIBUTE_UNUSED,
...@@ -703,6 +717,7 @@ no_memory: ...@@ -703,6 +717,7 @@ no_memory:
virDomainDefParserConfig virQEMUDriverDomainDefParserConfig = { virDomainDefParserConfig virQEMUDriverDomainDefParserConfig = {
.devicesPostParseCallback = qemuDomainDeviceDefPostParse, .devicesPostParseCallback = qemuDomainDeviceDefPostParse,
.domainPostParseCallback = qemuDomainDefPostParse,
}; };
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
<on_reboot>restart</on_reboot> <on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash> <on_crash>destroy</on_crash>
<devices> <devices>
<emulator>/usr/libexec/libvirt_lxc</emulator>
<filesystem type='mount' accessmode='passthrough'> <filesystem type='mount' accessmode='passthrough'>
<source dir='/root/container'/> <source dir='/root/container'/>
<target dir='/'/> <target dir='/'/>
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
<on_reboot>restart</on_reboot> <on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash> <on_crash>destroy</on_crash>
<devices> <devices>
<emulator>/usr/libexec/libvirt_lxc</emulator>
<filesystem type='mount' accessmode='passthrough'> <filesystem type='mount' accessmode='passthrough'>
<source dir='/root/container'/> <source dir='/root/container'/>
<target dir='/'/> <target dir='/'/>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册