1 #include "private_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 PrivateHeader::PrivateHeader(Stream& pel)
13 {
14     try
15     {
16         pel >> *this;
17         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 
27 void 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 
55 Stream& operator>>(Stream& s, PrivateHeader& ph)
56 {
57     s >> ph._header >> ph._createTimestamp >> ph._commitTimestamp >>
58         ph._creatorID >> ph._logType >> ph._reservedByte >> ph._sectionCount >>
59         ph._obmcLogID >> ph._creatorVersion >> ph._plid >> ph._id;
60     return s;
61 }
62 
63 Stream& operator<<(Stream& s, PrivateHeader& ph)
64 {
65     s << ph._header << ph._createTimestamp << ph._commitTimestamp
66       << ph._creatorID << ph._logType << ph._reservedByte << ph._sectionCount
67       << ph._obmcLogID << ph._creatorVersion << ph._plid << ph._id;
68     return s;
69 }
70 
71 Stream& operator>>(Stream& s, CreatorVersion& cv)
72 {
73     for (size_t i = 0; i < sizeof(CreatorVersion); i++)
74     {
75         s >> cv.version[i];
76     }
77     return s;
78 }
79 
80 Stream& operator<<(Stream& s, CreatorVersion& cv)
81 {
82     for (size_t i = 0; i < sizeof(CreatorVersion); i++)
83     {
84         s << cv.version[i];
85     }
86     return s;
87 }
88 
89 } // namespace pels
90 } // namespace openpower
91