diff options
author | Cheng C Yang <cheng.c.yang@intel.com> | 2019-07-03 02:15:21 +0300 |
---|---|---|
committer | Cheng C Yang <cheng.c.yang@intel.com> | 2019-07-03 02:15:21 +0300 |
commit | 3b1b4cf3eedd35a362ae95a16726b4d7db0642b2 (patch) | |
tree | 22208322209b379b5f01c64a2f4065345d9102b5 /services | |
parent | c339ea9333a3818c248993ad8b5a654b8c931d0d (diff) | |
download | provingground-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.cpp | 46 |
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) |