summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorCheng C Yang <cheng.c.yang@intel.com>2019-07-03 02:15:21 +0300
committerCheng C Yang <cheng.c.yang@intel.com>2019-07-03 02:15:21 +0300
commit3b1b4cf3eedd35a362ae95a16726b4d7db0642b2 (patch)
tree22208322209b379b5f01c64a2f4065345d9102b5 /services
parentc339ea9333a3818c248993ad8b5a654b8c931d0d (diff)
downloadprovingground-3b1b4cf3eedd35a362ae95a16726b4d7db0642b2.tar.xz
Fix incorrect UUID issue in MDRV2
SMBIOS MDRV2 show incorrect UUID, change it to correct 16bytes UUID. Tested: After DC cycle the host, MDRV2 will show UUID property like "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF". Check UUID in system information page in BIOS setup, the UUID in BIOS should be the same as the value in MDRV2 UUID property. Change-Id: I4aa6aa098aa83469825d61b4702ac84f09eae30f Signed-off-by: Cheng C Yang <cheng.c.yang@intel.com>
Diffstat (limited to 'services')
-rw-r--r--services/smbios-mdrv2/src/system.cpp46
1 files changed, 25 insertions, 21 deletions
diff --git a/services/smbios-mdrv2/src/system.cpp b/services/smbios-mdrv2/src/system.cpp
index de7517c..23f6f68 100644
--- a/services/smbios-mdrv2/src/system.cpp
+++ b/services/smbios-mdrv2/src/system.cpp
@@ -18,42 +18,46 @@
#include "mdrv2.hpp"
+#include <iomanip>
+#include <iostream>
+#include <sstream>
namespace phosphor
{
namespace smbios
{
-static std::string getNode(uint8_t *node, size_t len)
-{
- std::string result;
- for (int index = 0; index < len; index++)
- {
- result += std::to_string(node[index]);
- }
-
- return result;
-}
-
std::string System::uUID(std::string value)
{
- std::string result = "No UUID";
uint8_t *dataIn = storage;
dataIn = getSMBIOSTypePtr(dataIn, systemType);
if (dataIn != nullptr)
{
auto systemInfo = reinterpret_cast<struct SystemInfo *>(dataIn);
- struct UUID uUID = systemInfo->uUID;
- std::string tempS = std::to_string(uUID.timeLow) + "-" +
- std::to_string(uUID.timeMid) + "-" +
- std::to_string(uUID.timeHiAndVer) + "-";
- tempS += std::to_string(uUID.clockSeqHi) +
- std::to_string(uUID.clockSeqLow) + "-";
- tempS += getNode(uUID.node, sizeof(uUID.node) / sizeof(uUID.node[0]));
+ std::stringstream stream;
+ stream << std::setfill('0') << std::hex;
+ stream << std::setw(8) << systemInfo->uUID.timeLow;
+ stream << "-";
+ stream << std::setw(4) << systemInfo->uUID.timeMid;
+ stream << "-";
+ stream << std::setw(4) << systemInfo->uUID.timeHiAndVer;
+ stream << std::setw(2) << static_cast<int>(systemInfo->uUID.clockSeqHi);
+ stream << std::setw(2)
+ << static_cast<int>(systemInfo->uUID.clockSeqLow);
+ stream << "-";
+ static_assert(sizeof(systemInfo->uUID.node) == 6);
+ stream << std::setw(2) << static_cast<int>(systemInfo->uUID.node[0]);
+ stream << std::setw(2) << static_cast<int>(systemInfo->uUID.node[1]);
+ stream << std::setw(2) << static_cast<int>(systemInfo->uUID.node[2]);
+ stream << std::setw(2) << static_cast<int>(systemInfo->uUID.node[3]);
+ stream << std::setw(2) << static_cast<int>(systemInfo->uUID.node[4]);
+ stream << std::setw(2) << static_cast<int>(systemInfo->uUID.node[5]);
- result = tempS;
+ return sdbusplus::xyz::openbmc_project::Common::server::UUID::uUID(
+ stream.str());
}
- return sdbusplus::xyz::openbmc_project::Common::server::UUID::uUID(result);
+ return sdbusplus::xyz::openbmc_project::Common::server::UUID::uUID(
+ "00000000-0000-0000-0000-000000000000");
}
std::string System::version(std::string value)