summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Spinler <spinler@us.ibm.com>2017-09-28 13:13:08 -0500
committerMatt Spinler <spinler@us.ibm.com>2017-10-11 09:25:04 -0500
commitc39e859b44c7d9152c76462ab4848060c840ab29 (patch)
tree00cd5f026646677c4275e854183633e83ed341be
parent35108a774758099abb80299c8732b830418fa2ad (diff)
downloadphosphor-fan-presence-c39e859b44c7d9152c76462ab4848060c840ab29.tar.gz
phosphor-fan-presence-c39e859b44c7d9152c76462ab4848060c840ab29.zip
monitor: Start checking tach trust
The Fan class now uses the trust::Manager class to ask if a sensor value is trusted before analyzing its value against the upper and lower limits. Change-Id: I81dd468877873ba84753d76395b4a59129824c0b Signed-off-by: Matt Spinler <spinler@us.ibm.com>
-rw-r--r--monitor/fan.cpp14
-rw-r--r--monitor/fan.hpp8
-rw-r--r--monitor/main.cpp7
3 files changed, 27 insertions, 2 deletions
diff --git a/monitor/fan.cpp b/monitor/fan.cpp
index a2e0386..ba0744a 100644
--- a/monitor/fan.cpp
+++ b/monitor/fan.cpp
@@ -39,11 +39,13 @@ constexpr auto OPERATIONAL_STATUS_INTF =
Fan::Fan(Mode mode,
sdbusplus::bus::bus& bus,
phosphor::fan::event::EventPtr& events,
+ std::unique_ptr<trust::Manager>& trust,
const FanDefinition& def) :
_bus(bus),
_name(std::get<fanNameField>(def)),
_deviation(std::get<fanDeviationField>(def)),
- _numSensorFailsForNonFunc(std::get<numSensorFailsForNonfuncField>(def))
+ _numSensorFailsForNonFunc(std::get<numSensorFailsForNonfuncField>(def)),
+ _trustManager(trust)
{
//Start from a known state of functional
updateInventory(true);
@@ -64,6 +66,8 @@ Fan::Fan(Mode mode,
std::get<hasTargetField>(s),
std::get<timeoutField>(def),
events));
+
+ _trustManager->registerSensor(_sensors.back());
}
catch (InvalidSensorError& e)
{
@@ -89,6 +93,14 @@ void Fan::tachChanged()
void Fan::tachChanged(TachSensor& sensor)
{
+ if (_trustManager->active())
+ {
+ if (!_trustManager->checkTrust(sensor))
+ {
+ return;
+ }
+ }
+
auto running = sensor.timerRunning();
//If this sensor is out of range at this moment, start
diff --git a/monitor/fan.hpp b/monitor/fan.hpp
index 3da75cf..b366c44 100644
--- a/monitor/fan.hpp
+++ b/monitor/fan.hpp
@@ -5,6 +5,7 @@
#include <vector>
#include "event.hpp"
#include "tach_sensor.hpp"
+#include "trust_manager.hpp"
#include "types.hpp"
namespace phosphor
@@ -89,11 +90,13 @@ class Fan
* @param mode - mode of fan monitor
* @param bus - the dbus object
* @param events - pointer to sd_event object
+ * @param trust - the tach trust manager
* @param def - the fan definition structure
*/
Fan(Mode mode,
sdbusplus::bus::bus& bus,
phosphor::fan::event::EventPtr& events,
+ std::unique_ptr<trust::Manager>& trust,
const FanDefinition& def);
/**
@@ -197,6 +200,11 @@ class Fan
* The sensor objects for the fan
*/
std::vector<std::unique_ptr<TachSensor>> _sensors;
+
+ /**
+ * The tach trust manager object
+ */
+ std::unique_ptr<trust::Manager>& _trustManager;
};
}
diff --git a/monitor/main.cpp b/monitor/main.cpp
index f887232..060f27a 100644
--- a/monitor/main.cpp
+++ b/monitor/main.cpp
@@ -20,6 +20,7 @@
#include "event.hpp"
#include "fan.hpp"
#include "fan_defs.hpp"
+#include "trust_manager.hpp"
using namespace phosphor::fan::monitor;
using namespace phosphor::logging;
@@ -60,6 +61,9 @@ int main(int argc, char* argv[])
return -1;
}
+ std::unique_ptr<phosphor::fan::trust::Manager> trust =
+ std::make_unique<phosphor::fan::trust::Manager>(trustGroups);
+
phosphor::fan::event::EventPtr eventPtr{events};
//Attach the event object to the bus object so we can
@@ -68,7 +72,8 @@ int main(int argc, char* argv[])
for (const auto& fanDef : fanDefinitions)
{
- fans.emplace_back(std::make_unique<Fan>(mode, bus, eventPtr, fanDef));
+ fans.emplace_back(std::make_unique<Fan>(
+ mode, bus, eventPtr, trust, fanDef));
}
if (mode == Mode::init)
OpenPOWER on IntegriCloud