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