[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