[libvirt] [PATCH] 3/4 Add SMBIOS QEmu driver
Daniel Veillard
veillard at redhat.com
Fri Oct 22 08:54:19 UTC 2010
On Thu, Oct 21, 2010 at 03:58:50PM -0600, Eric Blake wrote:
> On 10/21/2010 02:23 PM, Daniel Veillard wrote:
> >The main trouble here is that the QEmu command uses names which are
> >similar to the official names for the entries used by the DMTF, but
> >that mean we cant base on name equality. I was tempted to use
>
> s/cant/can't/
>
> >something like strcasestr to go fishing on the names but since we
> >never used this in libvirt yet, and I'm not sure it's available in
> >gnulib, I did the patch using strstr, assuming entries provided by the
>
> Gnulib provides strcasestr() as LGPLv2+ (but beware - it only does
> what you want in unibyte locales); it also provides the c-strcasestr
> module (which is probably exactly what you want!), but it is
> currently LGPLv3+, although I can request on the gnulib list to have
> it relaxed if you'd like.
>
> >users would contain the word in lower case usually except maybe for the
> >first character. The matching glue is certainly perfectible.
>
> c_strcasestr() would certainly make it easier.
>
> Or, is this something where STRCASEEQ() would be good enough? That
> is, do we expect a user to always provide the full DMTF name "BIOS
> Version", or is the substring matching important because we want to
> all the user the shortcut of "Version"?
Well coming from a QEmu usage, people will likely just expect
"version" as that's what is used on the command line. I think matching
by subset is less likely to get users wondering why this doesn't work
as expected. Since we don't do exact name checking on input, I think
it's better to be flexible.
> >Also decided that if we can't associate an entry with an existing
> >QEmu SMBIOS command we would ignore it. On the ther hand if a block
>
> s/ther/other/
>
> >other than type 0 or 1 is used in the XML definition we would emit
> >a warning, but still not fail.
> >
> >+ /*
> >+ * QEmu accepts only a limited set of System informations, and
> >+ * use command line arguments shortcuts from the DMTF real names
> >+ * so go fishing for those
> >+ */
> >+ cur = def->entries;
> >+ while (cur != NULL) {
> >+ /* 0:Vendor */
> >+ if ((def->type == 0)&& (strstr(cur->name, "endor")))
> >+ virBufferVSprintf(&buf, ",vendor=\"%s\"", cur->value);
> >+ /* 0:BIOS Version */
> >+ else if ((def->type == 0)&& (strstr(cur->name, "ersion")))
> >+ virBufferVSprintf(&buf, ",version=\"%s\"", cur->value);
> >+ /* 0:BIOS Release Date */
> >+ else if ((def->type == 0)&& (strstr(cur->name, "ate")))
> >+ virBufferVSprintf(&buf, ",date=\"%s\"", cur->value);
> >+ /* 0:System BIOS Major Release and 0:System BIOS Minor Release */
> >+ else if ((def->type == 0)&& (strstr(cur->name, "elease")))
> >+ virBufferVSprintf(&buf, ",date=\"%s\"", cur->value);
>
> If the user provides both "Date" and "Major Release" names, does
> qemu complain about the doubled-up date="" option?
No actually that's different entries :-)
But qemu will complain if release is not formated as %d.%d, it takes as
a string what is 2 byte values in the SMBIOS tables. I didn't tried to
validate that at the driver level, rather let qemu report the error
I checked it shows up back up to virt-manager if something is not
formatted to its taste like the UUID
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