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         unflatten(pel);
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 void PrivateHeader::unflatten(Stream& stream)
56 {
57     stream >> _header >> _createTimestamp >> _commitTimestamp >> _creatorID >>
58         _logType >> _reservedByte >> _sectionCount >> _obmcLogID >>
59         _creatorVersion >> _plid >> _id;
60 }
61 
62 void PrivateHeader::flatten(Stream& stream)
63 {
64     stream << _header << _createTimestamp << _commitTimestamp << _creatorID
65            << _logType << _reservedByte << _sectionCount << _obmcLogID
66            << _creatorVersion << _plid << _id;
67 }
68 
69 Stream& 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 
78 Stream& 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
89