On Tue, Jan 12, 2016 at 02:22:41PM -0500, Cole Robinson wrote:
SMBIOS 2.6+ stores the UUID in a different format, with the first 3 fields in little endian format. This is what modern qemu delivers and what dmidecode also handles, so let's follow suit too. More info at this thread:
http://www.seabios.org/pipermail/seabios/2015-November/010031.html
The only place this affects is when reporting the UUID at startup.
https://bugzilla.redhat.com/show_bug.cgi?id=1284259
src/fw/biostables.c | 51 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 11 deletions(-)
diff --git a/src/fw/biostables.c b/src/fw/biostables.c index cb74396..2e15f82 100644 --- a/src/fw/biostables.c +++ b/src/fw/biostables.c @@ -306,17 +306,46 @@ display_uuid(void) if (memcmp(uuid, empty_uuid, sizeof(empty_uuid)) == 0) return;
printf("Machine UUID"
" %02x%02x%02x%02x"
"-%02x%02x"
"-%02x%02x"
"-%02x%02x"
"-%02x%02x%02x%02x%02x%02x\n"
, uuid[ 0], uuid[ 1], uuid[ 2], uuid[ 3]
, uuid[ 4], uuid[ 5]
, uuid[ 6], uuid[ 7]
, uuid[ 8], uuid[ 9]
, uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]);
/*
* comment borrowed from dmidecode:
*
* As of version 2.6 of the SMBIOS specification, the first 3
* fields of the UUID are supposed to be encoded on little-endian.
* The specification says that this is the defacto standard,
* however I've seen systems following RFC 4122 instead and use
* network byte order, so I am reluctant to apply the byte-swapping
* for older versions.
*/
I find this comment confusing - how about something like:
According to SMBIOS v2.6 the first three fields are encoded in little-endian format. Versions prior to v2.6 did not specify the encoding, but we follow dmidecode and assume big-endian encoding.
if (SMBiosAddr->smbios_major_version > 2 ||
(SMBiosAddr->smbios_major_version == 2 &&
SMBiosAddr->smbios_minor_version >= 6)) {
printf("Machine UUID"
" %02x%02x%02x%02x"
"-%02x%02x"
"-%02x%02x"
"-%02x%02x"
"-%02x%02x%02x%02x%02x%02x\n"
, uuid[ 3], uuid[ 2], uuid[ 1], uuid[ 0]
, uuid[ 5], uuid[ 4]
, uuid[ 7], uuid[ 6]
, uuid[ 8], uuid[ 9]
, uuid[10], uuid[11], uuid[12]
, uuid[13], uuid[14], uuid[15]);
} else {
printf("Machine UUID"
" %02x%02x%02x%02x"
"-%02x%02x"
"-%02x%02x"
"-%02x%02x"
"-%02x%02x%02x%02x%02x%02x\n"
, uuid[ 0], uuid[ 1], uuid[ 2], uuid[ 3]
, uuid[ 4], uuid[ 5]
, uuid[ 6], uuid[ 7]
, uuid[ 8], uuid[ 9]
, uuid[10], uuid[11], uuid[12]
, uuid[13], uuid[14], uuid[15]);
}
The above is okay to me, but I'd like to get Gerd's comments as well, as I think he had some concerns the last time it came up.
-Kevin