dbus-sdr: support reading OEM SEL logs
This commit supports reading OEM SEL record type in range 0xC0-0xDF and
0xE0-0xFF.
Tested:
Request to show SEL logs, OEM SEL log is shown.
Change-Id: I8e2d2d84143c79cb7e3575c3f713d2b3ad2aaaf7
Signed-off-by: Thang Tran <thuutran@amperecomputing.com>
diff --git a/dbus-sdr/storagecommands.cpp b/dbus-sdr/storagecommands.cpp
index 40deb1b..3174200 100644
--- a/dbus-sdr/storagecommands.cpp
+++ b/dbus-sdr/storagecommands.cpp
@@ -1079,6 +1079,44 @@
sensorNum, eventType, eventDir, eventData});
}
+ if (recordType >= dynamic_sensors::ipmi::sel::oemTsEventFirst &&
+ recordType <= dynamic_sensors::ipmi::sel::oemTsEventLast)
+ {
+ // Get the timestamp
+ std::tm timeStruct = {};
+ std::istringstream entryStream(entryTimestamp);
+
+ uint32_t timestamp = ipmi::sel::invalidTimeStamp;
+ if (entryStream >> std::get_time(&timeStruct, "%Y-%m-%dT%H:%M:%S"))
+ {
+ timeStruct.tm_isdst = -1;
+ timestamp = std::mktime(&timeStruct);
+ }
+
+ // Only keep the bytes that fit in the record
+ std::array<uint8_t, dynamic_sensors::ipmi::sel::oemTsEventSize>
+ eventData{};
+ std::copy_n(eventDataBytes.begin(),
+ std::min(eventDataBytes.size(), eventData.size()),
+ eventData.begin());
+
+ return ipmi::responseSuccess(nextRecordID, recordID, recordType,
+ oemTsEventType{timestamp, eventData});
+ }
+
+ if (recordType >= dynamic_sensors::ipmi::sel::oemEventFirst)
+ {
+ // Only keep the bytes that fit in the record
+ std::array<uint8_t, dynamic_sensors::ipmi::sel::oemEventSize>
+ eventData{};
+ std::copy_n(eventDataBytes.begin(),
+ std::min(eventDataBytes.size(), eventData.size()),
+ eventData.begin());
+
+ return ipmi::responseSuccess(nextRecordID, recordID, recordType,
+ eventData);
+ }
+
return ipmi::responseUnspecifiedError();
}