summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2019-09-20 13:46:02 -0500
committerMatt Spinler <spinler@us.ibm.com>2019-10-09 13:11:51 +0000
commit8c686cca8a3a0f9e010ef282cfd902c6f97d9e90 (patch)
treee0c640b63358d4db3ea4bfa7c284a1b930f59097
parent289aa477e09eb8d2fcbe852ea87f132b22c09439 (diff)
downloadphosphor-logging-8c686cca8a3a0f9e010ef282cfd902c6f97d9e90.tar.gz
phosphor-logging-8c686cca8a3a0f9e010ef282cfd902c6f97d9e90.zip
PEL: OpenBMC event log sev to PEL sev helper
Add a function to map the OpenBMC event log severity values to PEL severity values. When creating a PEL from an OpenBMC event log, the event log will have its own severity property, and if the PEL message registry entry for that error doesn't supply its own severity (it's optional), use this function to come up with the PEL severity value to use. Signed-off-by: Matt Spinler <spinler@us.ibm.com> Change-Id: I66aa001265d8acadb165de874e4ade03a8e28007
-rw-r--r--extensions/openpower-pels/openpower-pels.mk1
-rw-r--r--extensions/openpower-pels/severity.cpp54
-rw-r--r--extensions/openpower-pels/severity.hpp20
-rw-r--r--test/openpower-pels/Makefile.include10
-rw-r--r--test/openpower-pels/severity_test.cpp18
5 files changed, 103 insertions, 0 deletions
diff --git a/extensions/openpower-pels/openpower-pels.mk b/extensions/openpower-pels/openpower-pels.mk
index aa69a2e..89143b2 100644
--- a/extensions/openpower-pels/openpower-pels.mk
+++ b/extensions/openpower-pels/openpower-pels.mk
@@ -12,4 +12,5 @@ phosphor_log_manager_SOURCES += \
extensions/openpower-pels/private_header.cpp \
extensions/openpower-pels/registry.cpp \
extensions/openpower-pels/repository.cpp \
+ extensions/openpower-pels/severity.cpp \
extensions/openpower-pels/user_header.cpp
diff --git a/extensions/openpower-pels/severity.cpp b/extensions/openpower-pels/severity.cpp
new file mode 100644
index 0000000..1911c12
--- /dev/null
+++ b/extensions/openpower-pels/severity.cpp
@@ -0,0 +1,54 @@
+#include "severity.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+
+using LogSeverity = phosphor::logging::Entry::Level;
+
+/**
+ * @brief The major types of severity values, based on the
+ * the left nibble of the severity value.
+ */
+enum class PELSeverityType : uint8_t
+{
+ nonError = 0x00,
+ recovered = 0x10,
+ predictive = 0x20,
+ unrecoverable = 0x40,
+ critical = 0x50,
+ diagnostic = 0x60,
+ symptom = 0x70
+};
+
+uint8_t convertOBMCSeverityToPEL(LogSeverity severity)
+{
+ uint8_t pelSeverity = static_cast<uint8_t>(PELSeverityType::unrecoverable);
+ switch (severity)
+ {
+ case (LogSeverity::Notice):
+ case (LogSeverity::Informational):
+ case (LogSeverity::Debug):
+ pelSeverity = static_cast<uint8_t>(PELSeverityType::nonError);
+ break;
+
+ case (LogSeverity::Warning):
+ pelSeverity = static_cast<uint8_t>(PELSeverityType::predictive);
+ break;
+
+ case (LogSeverity::Critical):
+ pelSeverity = static_cast<uint8_t>(PELSeverityType::critical);
+ break;
+
+ case (LogSeverity::Emergency):
+ case (LogSeverity::Alert):
+ case (LogSeverity::Error):
+ pelSeverity = static_cast<uint8_t>(PELSeverityType::unrecoverable);
+ break;
+ }
+
+ return pelSeverity;
+}
+} // namespace pels
+} // namespace openpower
diff --git a/extensions/openpower-pels/severity.hpp b/extensions/openpower-pels/severity.hpp
new file mode 100644
index 0000000..f2b9921
--- /dev/null
+++ b/extensions/openpower-pels/severity.hpp
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "elog_entry.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+
+/**
+ * @brief Convert an OpenBMC event log severity to a PEL severity
+ *
+ * @param[in] severity - The OpenBMC event log severity
+ *
+ * @return uint8_t - The PEL severity value
+ */
+uint8_t convertOBMCSeverityToPEL(phosphor::logging::Entry::Level severity);
+
+} // namespace pels
+} // namespace openpower
diff --git a/test/openpower-pels/Makefile.include b/test/openpower-pels/Makefile.include
index 18df9ec..e6f08e2 100644
--- a/test/openpower-pels/Makefile.include
+++ b/test/openpower-pels/Makefile.include
@@ -13,6 +13,7 @@ check_PROGRAMS += \
registry_test \
repository_test \
section_header_test \
+ severity_test \
stream_test \
user_header_test
@@ -23,6 +24,7 @@ pel_objects = \
$(top_builddir)/extensions/openpower-pels/pel_values.o \
$(top_builddir)/extensions/openpower-pels/private_header.o \
$(top_builddir)/extensions/openpower-pels/registry.o \
+ $(top_builddir)/extensions/openpower-pels/severity.o \
$(top_builddir)/extensions/openpower-pels/user_header.o
additional_data_test_SOURCES = %reldir%/additional_data_test.cpp
@@ -121,6 +123,14 @@ registry_test_LDADD = \
$(top_builddir)/extensions/openpower-pels/pel_values.o
registry_test_LDFLAGS = $(test_ldflags)
+severity_test_SOURCES = %reldir%/severity_test.cpp
+severity_test_CPPFLAGS = $(test_cppflags)
+severity_test_CXXFLAGS = $(test_cxxflags)
+severity_test_LDADD = \
+ $(test_ldflags) \
+ $(top_builddir)/extensions/openpower-pels/severity.o
+severity_test_LDFLAGS = $(test_ldflags)
+
mtms_test_SOURCES = %reldir%/mtms_test.cpp
mtms_test_CPPFLAGS = $(test_cppflags)
mtms_test_CXXFLAGS = $(test_cxxflags)
diff --git a/test/openpower-pels/severity_test.cpp b/test/openpower-pels/severity_test.cpp
new file mode 100644
index 0000000..293196b
--- /dev/null
+++ b/test/openpower-pels/severity_test.cpp
@@ -0,0 +1,18 @@
+#include "extensions/openpower-pels/severity.hpp"
+
+#include <gtest/gtest.h>
+
+using namespace openpower::pels;
+using LogSeverity = phosphor::logging::Entry::Level;
+
+TEST(SeverityTest, SeverityMapTest)
+{
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Informational), 0x00);
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Notice), 0x00);
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Debug), 0x00);
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Warning), 0x20);
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Critical), 0x50);
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Emergency), 0x40);
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Alert), 0x40);
+ ASSERT_EQ(convertOBMCSeverityToPEL(LogSeverity::Error), 0x40);
+}
OpenPOWER on IntegriCloud