[libvirt] [PATCH 2/3] Add optional model attribute to the controller element
Daniel Veillard
veillard at redhat.com
Mon Jun 21 11:18:52 UTC 2010
On Thu, Jun 17, 2010 at 11:15:43PM +0200, Matthias Bolte wrote:
> This is a step towards controller support for the ESX driver.
> ---
> docs/schemas/domain.rng | 9 +++++++++
> src/conf/domain_conf.c | 34 ++++++++++++++++++++++++++++++++++
> src/conf/domain_conf.h | 11 +++++++++++
> src/qemu/qemu_driver.c | 1 +
> 4 files changed, 55 insertions(+), 0 deletions(-)
>
> diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
> index 9121da3..6f3408d 100644
> --- a/docs/schemas/domain.rng
> +++ b/docs/schemas/domain.rng
> @@ -669,6 +669,15 @@
> <ref name="unsignedInt"/>
> </attribute>
> <optional>
> + <attribute name="model">
> + <choice>
> + <value>buslogic</value>
> + <value>lsilogic</value>
> + <value>lsisas1068</value>
> + </choice>
> + </attribute>
> + </optional>
> + <optional>
> <ref name="address"/>
> </optional>
> </element>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index cac4042..182d8ab 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -139,6 +139,11 @@ VIR_ENUM_IMPL(virDomainController, VIR_DOMAIN_CONTROLLER_TYPE_LAST,
> "sata",
> "virtio-serial")
>
> +VIR_ENUM_IMPL(virDomainControllerModel, VIR_DOMAIN_CONTROLLER_MODEL_LAST,
> + "buslogic",
> + "lsilogic",
> + "lsisas1068")
> +
> VIR_ENUM_IMPL(virDomainFS, VIR_DOMAIN_FS_TYPE_LAST,
> "mount",
> "block",
> @@ -1670,6 +1675,7 @@ virDomainControllerDefParseXML(xmlNodePtr node,
> virDomainControllerDefPtr def;
> char *type = NULL;
> char *idx = NULL;
> + char *model = NULL;
>
> if (VIR_ALLOC(def) < 0) {
> virReportOOMError();
> @@ -1694,6 +1700,17 @@ virDomainControllerDefParseXML(xmlNodePtr node,
> }
> }
>
> + model = virXMLPropString(node, "model");
> + if (model) {
> + if ((def->model = virDomainControllerModelTypeFromString(model)) < 0) {
> + virDomainReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Unknown model type '%s'"), model);
> + goto error;
> + }
> + } else {
> + def->model = -1;
> + }
> +
> if (virDomainDeviceInfoParseXML(node, &def->info, flags) < 0)
> goto error;
>
> @@ -1745,6 +1762,7 @@ virDomainControllerDefParseXML(xmlNodePtr node,
> cleanup:
> VIR_FREE(type);
> VIR_FREE(idx);
> + VIR_FREE(model);
>
> return def;
>
> @@ -4819,6 +4837,7 @@ static int virDomainDefMaybeAddController(virDomainDefPtr def,
>
> cont->type = type;
> cont->idx = idx;
> + cont->model = -1;
>
> if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL) {
> cont->opts.vioserial.ports = -1;
> @@ -5232,6 +5251,7 @@ virDomainControllerDefFormat(virBufferPtr buf,
> int flags)
> {
> const char *type = virDomainControllerTypeToString(def->type);
> + const char *model = NULL;
>
> if (!type) {
> virDomainReportError(VIR_ERR_INTERNAL_ERROR,
> @@ -5239,10 +5259,24 @@ virDomainControllerDefFormat(virBufferPtr buf,
> return -1;
> }
>
> + if (def->model != -1) {
> + model = virDomainControllerModelTypeToString(def->model);
> +
> + if (!model) {
> + virDomainReportError(VIR_ERR_INTERNAL_ERROR,
> + _("unexpected model type %d"), def->model);
> + return -1;
> + }
> + }
> +
> virBufferVSprintf(buf,
> " <controller type='%s' index='%d'",
> type, def->idx);
>
> + if (model) {
> + virBufferEscapeString(buf, " model='%s'", model);
> + }
> +
> switch (def->type) {
> case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL:
> if (def->opts.vioserial.ports != -1) {
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 701849f..55893d6 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -194,6 +194,15 @@ enum virDomainControllerType {
> VIR_DOMAIN_CONTROLLER_TYPE_LAST
> };
>
> +
> +enum virDomainControllerModel {
> + VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC,
> + VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC,
> + VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068,
> +
> + VIR_DOMAIN_CONTROLLER_MODEL_LAST
> +};
> +
> typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts;
> typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr;
> struct _virDomainVirtioSerialOpts {
> @@ -207,6 +216,7 @@ typedef virDomainControllerDef *virDomainControllerDefPtr;
> struct _virDomainControllerDef {
> int type;
> int idx;
> + int model; /* -1 == undef */
> union {
> virDomainVirtioSerialOpts vioserial;
> } opts;
> @@ -1073,6 +1083,7 @@ VIR_ENUM_DECL(virDomainDiskBus)
> VIR_ENUM_DECL(virDomainDiskCache)
> VIR_ENUM_DECL(virDomainDiskErrorPolicy)
> VIR_ENUM_DECL(virDomainController)
> +VIR_ENUM_DECL(virDomainControllerModel)
> VIR_ENUM_DECL(virDomainFS)
> VIR_ENUM_DECL(virDomainNet)
> VIR_ENUM_DECL(virDomainChrTarget)
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index c7923bc..25caa29 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -7260,6 +7260,7 @@ qemuDomainFindOrCreateSCSIDiskController(struct qemud_driver *driver,
> }
> cont->type = VIR_DOMAIN_CONTROLLER_TYPE_SCSI;
> cont->idx = 0;
> + cont->model = -1;
>
> VIR_INFO0("No SCSI controller present, hotplugging one");
> if (qemudDomainAttachPciControllerDevice(driver,
Looks fine to me but the fack that the attribute is ignored except on
ESX driver should probably be documented in some ways
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list