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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list