blob: 117ade167b097271a90e10699578868676b5b30f [file] [log] [blame]
Matt Spinler03c1d912019-07-10 14:12:15 -05001#include "user_header.hpp"
2
3#include <phosphor-logging/log.hpp>
4
5namespace openpower
6{
7namespace pels
8{
9
10using namespace phosphor::logging;
11
Matt Spinlercf5a8d02019-09-05 12:58:53 -050012void UserHeader::unflatten(Stream& stream)
Matt Spinler03c1d912019-07-10 14:12:15 -050013{
Matt Spinlercf5a8d02019-09-05 12:58:53 -050014 stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >>
15 _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >>
16 _actionFlags >> _reserved4Byte2;
Matt Spinler03c1d912019-07-10 14:12:15 -050017}
18
Matt Spinlercf5a8d02019-09-05 12:58:53 -050019void UserHeader::flatten(Stream& stream)
Matt Spinler03c1d912019-07-10 14:12:15 -050020{
Matt Spinlercf5a8d02019-09-05 12:58:53 -050021 stream << _header << _eventSubsystem << _eventScope << _eventSeverity
22 << _eventType << _reserved4Byte1 << _problemDomain << _problemVector
23 << _actionFlags << _reserved4Byte2;
Matt Spinler03c1d912019-07-10 14:12:15 -050024}
25
26UserHeader::UserHeader(Stream& pel)
27{
28 try
29 {
Matt Spinlercf5a8d02019-09-05 12:58:53 -050030 unflatten(pel);
Matt Spinler03c1d912019-07-10 14:12:15 -050031 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
41void 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