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