[libvirt] [PATCH] qemu: Allow the user to specify vendor and product for disk

Dave Allan dallan at redhat.com
Wed Nov 7 21:04:58 UTC 2012


On Wed, Nov 07, 2012 at 11:24:43PM +0800, Osier Yang wrote:
> On 2012年11月05日 21:34, Martin Kletzander wrote:
> >On 11/05/2012 08:04 AM, Osier Yang wrote:
> >>QEMU supports to set vendor and product strings for disk since
> >>1.2.0 (only scsi-disk, scsi-hd, scsi-cd support it), this patch
> >>exposes it with new XML elements<vendor>  and<product>  of disk
> >>device.
> >>---
> >>  docs/formatdomain.html.in                          |   10 +++++
> >>  docs/schemas/domaincommon.rng                      |   10 +++++
> >>  src/conf/domain_conf.c                             |   30 ++++++++++++++++
> >>  src/conf/domain_conf.h                             |    2 +
> >>  src/qemu/qemu_command.c                            |   29 ++++++++++++++++
> >>  .../qemuxml2argv-disk-scsi-disk-vpd.args           |   13 +++++++
> >>  .../qemuxml2argv-disk-scsi-disk-vpd.xml            |   36 ++++++++++++++++++++
> >>  tests/qemuxml2argvtest.c                           |    4 ++
> >>  8 files changed, 134 insertions(+), 0 deletions(-)
> >>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.args
> >>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-vpd.xml
> >>
> >>diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> >>index c8da33d..cc9e871 100644
> >>--- a/docs/formatdomain.html.in
> >>+++ b/docs/formatdomain.html.in
> >>@@ -1657,6 +1657,16 @@
> >>          of 16 hexadecimal digits.
> >>          <span class='since'>Since 0.10.1</span>
> >>        </dd>
> >>+<dt><code>vendor</code></dt>
> >>+<dd>If present, this element specifies the vendor of a virtual hard
> >>+        disk or CD-ROM device. It's a not more than 8 bytes alphanumeric string.
> >
> >Last sentence doesn't make sense, I suggest changing it to either: "It
> >can't be longer than 8 alphanumeric characters." or simply "Maximum 8
> >alphanumeric characters."
> 
> Okay, honestly, I wasn't comfortable with the sentence, but can't
> get a better one at that time, :-) I will change your advise a bit:
> 
> It must not be longer than 8 alphanumeric characters.

Not to be pedantic, but what happens if you hand it doublebyte
characters?

> >
> >>+<span class='since'>Since 1.0.1</span>
> >>+</dd>
> >>+<dt><code>product</code></dt>
> >>+<dd>If present, this element specifies the product of a virtual hard
> >>+        disk or CD-ROM device. It's a not more than 16 bytes alphanumeric string.
> >
> >dtto
> >
> >>+<span class='since'>Since 1.0.1</span>
> >>+</dd>
> >>        <dt><code>host</code></dt>
> >>        <dd>The<code>host</code>  element has two attributes "name" and "port",
> >>          which specify the hostname and the port number. The meaning of this
> >>diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> >>index 2beb035..ed7d1d0 100644
> >>--- a/docs/schemas/domaincommon.rng
> >>+++ b/docs/schemas/domaincommon.rng
> >>@@ -905,6 +905,16 @@
> >>            <ref name="wwn"/>
> >>          </element>
> >>        </optional>
> >>+<optional>
> >>+<element name="vendor">
> >>+<text/>
> >>+</element>
> >>+</optional>
> >>+<optional>
> >>+<element name="product">
> >>+<text/>
> >>+</element>
> >>+</optional>
> >
> >This is little bit different than the other specifications around in the
> >code and could be made better, but looking at the schema I've found more
> >inconsistencies, so it's ok for now.  I'll send a cleanup patch later
> >for these and the others as well.
> >
> >>      </interleave>
> >>    </define>
> >>    <define name="snapshot">
> >>diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> >>index 0575fcd..db6608e 100644
> >>--- a/src/conf/domain_conf.c
> >>+++ b/src/conf/domain_conf.c
> >>@@ -979,6 +979,8 @@ void virDomainDiskDefFree(virDomainDiskDefPtr def)
> >>      VIR_FREE(def->mirror);
> >>      VIR_FREE(def->auth.username);
> >>      VIR_FREE(def->wwn);
> >>+    VIR_FREE(def->vendor);
> >>+    VIR_FREE(def->product);
> >>      if (def->auth.secretType == VIR_DOMAIN_DISK_SECRET_TYPE_USAGE)
> >>          VIR_FREE(def->auth.secret.usage);
> >>      virStorageEncryptionFree(def->encryption);
> >>@@ -3498,6 +3500,8 @@ cleanup:
> >>      goto cleanup;
> >>  }
> >>
> >>+#define VENDOR_LEN  8
> >>+#define PRODUCT_LEN 16
> >>
> >>  /* Parse the XML definition for a disk
> >>   * @param node XML nodeset to parse for disk definition
> >>@@ -3550,6 +3554,8 @@ virDomainDiskDefParseXML(virCapsPtr caps,
> >>      char *logical_block_size = NULL;
> >>      char *physical_block_size = NULL;
> >>      char *wwn = NULL;
> >>+    char *vendor = NULL;
> >>+    char *product = NULL;
> >>
> >>      if (VIR_ALLOC(def)<  0) {
> >>          virReportOOMError();
> >>@@ -3888,6 +3894,24 @@ virDomainDiskDefParseXML(virCapsPtr caps,
> >>
> >>                  if (!virValidateWWN(wwn))
> >>                      goto error;
> >>+            } else if (!vendor&&
> >>+                       xmlStrEqual(cur->name, BAD_CAST "vendor")) {
> >>+                vendor = (char *)xmlNodeGetContent(cur);
> >>+
> >>+                if (strlen(vendor)>  VENDOR_LEN) {
> >>+                    virReportError(VIR_ERR_XML_ERROR, "%s",
> >>+                                   _("disk vendor is more than 8 bytes string"));
> >
> >This should be "disk vendor name is more than 8 characters long" or "..
> >is longer than 8 characters", also there is no check these are
> >alphanumeric although it is mentioned in the documentation.  I believe
> >we can use something similar to virValidateWWN().
> 
> Okay, since I already tried to validate the strings, further checking
> makes sense.
> 
> Sorry for the late response, will send v2 soon.
> 
> Regards,
> Osier
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list