summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac4
-rw-r--r--elog_entry.hpp10
-rw-r--r--elog_serialize.cpp19
-rw-r--r--log_manager.cpp1
-rw-r--r--test/serialization_test_properties.cpp4
5 files changed, 33 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index 2e4cdd1..d9c022d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -76,6 +76,8 @@ AC_DEFINE(INVENTORY_ROOT, "/xyz/openbmc_project/inventory", [The inventory root.
AC_DEFINE(CALLOUT_FWD_ASSOCIATION, "callout", [The name of the callout's forward association.])
AC_DEFINE(CALLOUT_REV_ASSOCIATION, "fault", [The name of the callout's reverse association.])
AC_DEFINE(BMC_VERSION_FILE, "/etc/os-release", [The file that contains the BMC firmware version])
+AC_DEFINE(FIRST_CEREAL_CLASS_VERSION_WITH_FWLEVEL, "2",
+ [First Cereal class version with the BMC code version persisted])
AC_ARG_VAR(YAML_DIR_TEST, [The path to the test error yaml files.])
AS_IF([test "x$YAML_DIR_TEST" == "x"], \
@@ -109,7 +111,7 @@ AC_DEFINE_UNQUOTED([ERROR_INFO_CAP], [$ERROR_INFO_CAP], \
[Cap on informational (and below) severity errors])
AC_ARG_VAR(CLASS_VERSION, [Class version to register with Cereal])
-AS_IF([test "x$CLASS_VERSION" == "x"], [CLASS_VERSION=1])
+AS_IF([test "x$CLASS_VERSION" == "x"], [CLASS_VERSION=2])
AC_DEFINE_UNQUOTED([CLASS_VERSION], [$CLASS_VERSION], [Class version to register with Cereal])
AC_CONFIG_HEADERS([config.h])
diff --git a/elog_entry.hpp b/elog_entry.hpp
index 8dcc2a2..5ee8f5f 100644
--- a/elog_entry.hpp
+++ b/elog_entry.hpp
@@ -4,6 +4,7 @@
#include <sdbusplus/server/object.hpp>
#include "xyz/openbmc_project/Logging/Entry/server.hpp"
#include "xyz/openbmc_project/Object/Delete/server.hpp"
+#include "xyz/openbmc_project/Software/Version/server.hpp"
#include "org/openbmc/Associations/server.hpp"
namespace phosphor
@@ -14,7 +15,8 @@ namespace logging
using EntryIfaces = sdbusplus::server::object::object<
sdbusplus::xyz::openbmc_project::Logging::server::Entry,
sdbusplus::xyz::openbmc_project::Object::server::Delete,
- sdbusplus::org::openbmc::server::Associations>;
+ sdbusplus::org::openbmc::server::Associations,
+ sdbusplus::xyz::openbmc_project::Software::server::Version>;
using AssociationList =
std::vector<std::tuple<std::string, std::string, std::string>>;
@@ -50,6 +52,8 @@ class Entry : public EntryIfaces
* @param[in] severityErr - The severity of the error.
* @param[in] msgErr - The message of the error.
* @param[in] additionalDataErr - The error metadata.
+ * @param[in] objects - The list of associations.
+ * @param[in] fwVersion - The BMC code version.
* @param[in] parent - The error's parent.
*/
Entry(sdbusplus::bus::bus& bus,
@@ -60,6 +64,7 @@ class Entry : public EntryIfaces
std::string&& msgErr,
std::vector<std::string>&& additionalDataErr,
AssociationList&& objects,
+ const std::string& fwVersion,
internal::Manager& parent) :
EntryIfaces(bus, path.c_str(), true),
parent(parent)
@@ -75,6 +80,9 @@ class Entry : public EntryIfaces
sdbusplus::xyz::openbmc_project::
Logging::server::Entry::resolved(false);
+ version(fwVersion);
+ purpose(VersionPurpose::BMC);
+
// Emit deferred signal.
this->emit_object_added();
};
diff --git a/elog_serialize.cpp b/elog_serialize.cpp
index 1af1946..d807a93 100644
--- a/elog_serialize.cpp
+++ b/elog_serialize.cpp
@@ -29,7 +29,8 @@ template<class Archive>
void save(Archive& a, const Entry& e, const std::uint32_t version)
{
a(e.id(), e.severity(), e.timestamp(),
- e.message(), e.additionalData(), e.associations(), e.resolved());
+ e.message(), e.additionalData(), e.associations(), e.resolved(),
+ e.version());
}
/** @brief Function required by Cereal to perform deserialization.
@@ -52,9 +53,18 @@ void load(Archive& a, Entry& e, const std::uint32_t version)
std::vector<std::string> additionalData{};
bool resolved{};
AssociationList associations{};
+ std::string fwVersion{};
- a(id, severity, timestamp, message,
- additionalData, associations, resolved);
+ if (version < std::stoul(FIRST_CEREAL_CLASS_VERSION_WITH_FWLEVEL))
+ {
+ a(id, severity, timestamp, message,
+ additionalData, associations, resolved);
+ }
+ else
+ {
+ a(id, severity, timestamp, message,
+ additionalData, associations, resolved, fwVersion);
+ }
e.id(id);
e.severity(severity);
@@ -64,6 +74,9 @@ void load(Archive& a, Entry& e, const std::uint32_t version)
e.sdbusplus::xyz::openbmc_project::
Logging::server::Entry::resolved(resolved);
e.associations(associations);
+ e.version(fwVersion);
+ e.purpose(sdbusplus::xyz::openbmc_project::Software::
+ server::Version::VersionPurpose::BMC);
}
fs::path serialize(const Entry& e, const fs::path& dir)
diff --git a/log_manager.cpp b/log_manager.cpp
index 641ed7b..f808e4b 100644
--- a/log_manager.cpp
+++ b/log_manager.cpp
@@ -201,6 +201,7 @@ void Manager::_commit(uint64_t transactionId, std::string&& errMsg,
std::move(errMsg),
std::move(additionalData),
std::move(objects),
+ fwVersion,
*this);
serialize(*e);
entries.insert(std::make_pair(entryId, std::move(e)));
diff --git a/test/serialization_test_properties.cpp b/test/serialization_test_properties.cpp
index 6c8ddf3..be9a7c7 100644
--- a/test/serialization_test_properties.cpp
+++ b/test/serialization_test_properties.cpp
@@ -16,6 +16,7 @@ TEST_F(TestSerialization, testProperties)
std::vector<std::string> testData{"additional", "data"};
uint64_t timestamp{100};
std::string message{"test error"};
+ std::string fwLevel{"level42"};
auto input = std::make_unique<Entry>(
bus,
std::string(OBJ_ENTRY) + '/' + std::to_string(id),
@@ -25,6 +26,7 @@ TEST_F(TestSerialization, testProperties)
std::move(message),
std::move(testData),
std::move(assocations),
+ fwLevel,
manager);
auto path = serialize(*input, TestSerialization::dir);
@@ -44,6 +46,8 @@ TEST_F(TestSerialization, testProperties)
EXPECT_EQ(input->additionalData(), output->additionalData());
EXPECT_EQ(input->resolved(), output->resolved());
EXPECT_EQ(input->associations(), output->associations());
+ EXPECT_EQ(input->version(), output->version());
+ EXPECT_EQ(input->purpose(), output->purpose());
}
} // namespace test
OpenPOWER on IntegriCloud