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