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