1 #include "user_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 void UserHeader::unflatten(Stream& stream) 13 { 14 stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >> 15 _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >> 16 _actionFlags >> _reserved4Byte2; 17 } 18 19 void UserHeader::flatten(Stream& stream) 20 { 21 stream << _header << _eventSubsystem << _eventScope << _eventSeverity 22 << _eventType << _reserved4Byte1 << _problemDomain << _problemVector 23 << _actionFlags << _reserved4Byte2; 24 } 25 26 UserHeader::UserHeader(Stream& pel) 27 { 28 try 29 { 30 unflatten(pel); 31 validate(); 32 } 33 catch (const std::exception& e) 34 { 35 log<level::ERR>("Cannot unflatten user header", 36 entry("ERROR=%s", e.what())); 37 _valid = false; 38 } 39 } 40 41 void UserHeader::validate() 42 { 43 bool failed = false; 44 if (header().id != userHeaderSectionID) 45 { 46 log<level::ERR>("Invalid user header section ID", 47 entry("ID=0x%X", header().id)); 48 failed = true; 49 return; 50 } 51 52 if (header().version != userHeaderVersion) 53 { 54 log<level::ERR>("Invalid user header version", 55 entry("VERSION=0x%X", header().version)); 56 failed = true; 57 return; 58 } 59 60 _valid = (failed) ? false : true; 61 } 62 63 } // namespace pels 64 } // namespace openpower 65