1 #include "private_header.hpp" 2 3 #include <phosphor-logging/log.hpp> 4 5 namespace openpower 6 { 7 namespace pels 8 { 9 10 using namespace phosphor::logging; 11 12 PrivateHeader::PrivateHeader(Stream& pel) 13 { 14 try 15 { 16 unflatten(pel); 17 validate(); 18 } 19 catch (const std::exception& e) 20 { 21 log<level::ERR>("Cannot unflatten private header", 22 entry("ERROR=%s", e.what())); 23 _valid = false; 24 } 25 } 26 27 void PrivateHeader::validate() 28 { 29 bool failed = false; 30 31 if (header().id != privateHeaderSectionID) 32 { 33 log<level::ERR>("Invalid private header section ID", 34 entry("ID=0x%X", header().id)); 35 failed = true; 36 } 37 38 if (header().version != privateHeaderVersion) 39 { 40 log<level::ERR>("Invalid private header version", 41 entry("VERSION=0x%X", header().version)); 42 failed = true; 43 } 44 45 if (_sectionCount < minSectionCount) 46 { 47 log<level::ERR>("Invalid section count in private header", 48 entry("SECTION_COUNT=0x%X", _sectionCount)); 49 failed = true; 50 } 51 52 _valid = (failed) ? false : true; 53 } 54 55 void PrivateHeader::unflatten(Stream& stream) 56 { 57 stream >> _header >> _createTimestamp >> _commitTimestamp >> _creatorID >> 58 _logType >> _reservedByte >> _sectionCount >> _obmcLogID >> 59 _creatorVersion >> _plid >> _id; 60 } 61 62 void PrivateHeader::flatten(Stream& stream) 63 { 64 stream << _header << _createTimestamp << _commitTimestamp << _creatorID 65 << _logType << _reservedByte << _sectionCount << _obmcLogID 66 << _creatorVersion << _plid << _id; 67 } 68 69 Stream& operator>>(Stream& s, CreatorVersion& cv) 70 { 71 for (size_t i = 0; i < sizeof(CreatorVersion); i++) 72 { 73 s >> cv.version[i]; 74 } 75 return s; 76 } 77 78 Stream& operator<<(Stream& s, CreatorVersion& cv) 79 { 80 for (size_t i = 0; i < sizeof(CreatorVersion); i++) 81 { 82 s << cv.version[i]; 83 } 84 return s; 85 } 86 87 } // namespace pels 88 } // namespace openpower 89