Update keyword’s value in backup and restore PEL
PELs related to backup and restore are not showing correct
representation of source and destination keyword’s value, as some of
the keywords may have nonprintable characters.
To solve this issue, keyword’s value is shown in hexadecimal
representation while creating PELs.
Test Output:
PEL logged for VPD mismatch
```
root@p10bmcnewtest:~# peltool -i 0x5000188A
{
"Private Header": {
"Section Version": "1",
"Sub-section type": "0",
"Created by": "bmc vpd",
"Created at": "04/11/2025 11:15:54",
"Committed at": "04/11/2025 11:15:54",
"Creator Subsystem": "BMC",
"CSSVER": "",
"Platform Log Id": "0x5000188A",
"Entry Id": "0x5000188A",
"BMC Event Log Id": "88"
},
"User Header": {
"Section Version": "1",
"Sub-section type": "0",
"Log Committed by": "bmc error logging",
"Subsystem": "CEC Hardware - VPD Interface",
"Event Scope": "Entire Platform",
"Event Severity": "Predictive Error",
"Event Type": "Not Applicable",
"Action Flags": [
"Service Action Required",
"Report Externally",
"HMC Call Home"
],
"Host Transmission": "Not Sent",
"HMC Transmission": "Not Sent"
},
"Primary SRC": {
"Section Version": "1",
"Sub-section type": "1",
"Created by": "bmc vpd",
"SRC Version": "0x02",
"SRC Format": "0x55",
"Virtual Progress SRC": "False",
"I5/OS Service Event Bit": "False",
"Hypervisor Dump Initiated":"False",
"Backplane CCIN": "2E2D",
"Terminate FW Error": "False",
"Deconfigured": "False",
"Guarded": "False",
"Error Details": {
"Message": "Error occurred due to VPD mismatch between primary and backup."
},
"Valid Word Count": "0x09",
"Reference Code": "BD554008",
"Hex Word 2": "00000055",
"Hex Word 3": "2E2D0010",
"Hex Word 4": "00000000",
"Hex Word 5": "00000000",
"Hex Word 6": "00000000",
"Hex Word 7": "00000000",
"Hex Word 8": "00000000",
"Hex Word 9": "00000000",
"Callout Section": {
"Callout Count": "1",
"Callouts": [{
"FRU Type": "Maintenance Procedure Required",
"Priority": "Mandatory, replace all with this type as a unit",
"Procedure": "BMC0007"
}]
}
},
"Extended User Header": {
"Section Version": "1",
"Sub-section type": "0",
"Created by": "bmc error logging",
"Reporting Machine Type": "9105-22B",
"Reporting Serial Number": "139F210",
"FW Released Ver": "",
"FW SubSys Version": "fw1110.00-3.83",
"Common Ref Time": "00/00/0000 00:00:00",
"Symptom Id Len": "20",
"Symptom Id": "BD554008_2E2D0010"
},
"Failing MTMS": {
"Section Version": "1",
"Sub-section type": "0",
"Created by": "bmc error logging",
"Machine Type Model": "9105-22B",
"Serial Number": "139F210"
},
"User Data 0": {
"Section Version": "1",
"Sub-section type": "1",
"Created by": "bmc error logging",
"BMCLoad": "1.36 0.94 0.73",
"BMCState": "Ready",
"BMCUptime": "0y 0d 1h 7m 50s",
"BootState": "Unspecified",
"ChassisState": "Off",
"FW Version ID": "fw1110.00-3.83-2-g593537a90a-dirty",
"HostState": "Off",
"System IM": "50001001"
},
"User Data 1": {
"Section Version": "1",
"Sub-section type": "1",
"Created by": "bmc error logging",
"DESCRIPTION": "Mismatch found between source and destination VPD for record : LXR0 and keyword : LX . Value read from source : 0x3100040100300071 . Value read from destination : 0x3300040100300071",
"FileName": "/usr/src/debug/openpower-fru-vpd/1.0+git/vpd-manager/src/backup_restore.cpp",
"FunctionName": "backupAndRestoreIpzVpd",
"InteranlRc": "0",
"UserData1": "",
"UserData2": ""
}
}
```
Change-Id: Ie99f9758071ab07e6b992c66bee58571a6672ac0
Signed-off-by: Anupama B R <anupama.b.r1@ibm.com>
diff --git a/vpd-manager/include/utility/common_utility.hpp b/vpd-manager/include/utility/common_utility.hpp
index 15b33a2..79c54c8 100644
--- a/vpd-manager/include/utility/common_utility.hpp
+++ b/vpd-manager/include/utility/common_utility.hpp
@@ -113,5 +113,29 @@
std::transform(i_string.begin(), i_string.end(), i_string.begin(),
[](unsigned char l_char) { return std::tolower(l_char); });
}
+
+/**
+ * @brief An API to get hex representation of the incoming bytes.
+ *
+ * The API returns the hex represented value of the given input in string format
+ * with 0x prefix.
+ *
+ * @param[in] i_keywordValue - Vector of input byte.
+ *
+ * @return - Returns the converted string value.
+ */
+inline std::string convertByteVectorToHex(
+ const types::BinaryVector& i_keywordValue)
+{
+ std::ostringstream l_oss;
+ l_oss << "0x";
+ for (const auto& l_byte : i_keywordValue)
+ {
+ l_oss << std::setfill('0') << std::setw(2) << std::hex
+ << static_cast<int>(l_byte);
+ }
+
+ return l_oss.str();
+}
} // namespace commonUtility
} // namespace vpd