Modify set-value function from external
Move Special mode from bmcweb to dbus-sensors, this will be handled via dbus-sensor when the user set-value f$
This is unlikely to break any users because the Intel special mode function is no change, only move to dbus-s$
The set value function is to filter the external set, excluding the internal set.
In the external set, if in INSECURE_UNRESTRICTED_SENSOR_OVERRIDE, no need to check before set value else add $
bmcweb needs to be merged at the same time.
bmcweb changes are pushed to Gerrit:
https://gerrit.openbmc-project.xyz/c/openbmc/bmcweb/+/42448
the mailing list discussion links:
https://lists.ozlabs.org/pipermail/openbmc/2021-March/025597.html
Signed-off-by: Bruce Lee <Bruce_Lee@quantatw.com>
Change-Id: I0919e4d2343e81045010a2b0d4bf01dc272bcb07
diff --git a/src/Utils.cpp b/src/Utils.cpp
index 5217129..cf0ce9a 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -14,6 +14,8 @@
// limitations under the License.
*/
+#include "dbus-sensor_config.h"
+
#include <Utils.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/container/flat_map.hpp>
@@ -35,6 +37,7 @@
static bool powerStatusOn = false;
static bool biosHasPost = false;
+static bool manufacturingMode = false;
static std::unique_ptr<sdbusplus::bus::match::match> powerMatch = nullptr;
static std::unique_ptr<sdbusplus::bus::match::match> postMatch = nullptr;
@@ -504,3 +507,54 @@
}
return std::nullopt;
}
+
+void setupManufacturingModeMatch(sdbusplus::asio::connection& conn)
+{
+ static std::unique_ptr<sdbusplus::bus::match::match>
+ setupManufacturingModeMatch =
+ std::make_unique<sdbusplus::bus::match::match>(
+ conn,
+ "type='signal',interface='org.freedesktop.DBus."
+ "Properties',member='"
+ "PropertiesChanged',arg0namespace='xyz.openbmc_project."
+ "Security.SpecialMode'",
+ [](sdbusplus::message::message& msg) {
+ std::string interfaceName;
+ boost::container::flat_map<std::string,
+ std::variant<std::string>>
+ propertiesChanged;
+ std::string manufacturingModeStatus;
+
+ msg.read(interfaceName, propertiesChanged);
+ if (propertiesChanged.begin() == propertiesChanged.end())
+ {
+ return;
+ }
+
+ manufacturingModeStatus = std::get<std::string>(
+ propertiesChanged.begin()->second);
+ manufacturingMode = false;
+ if (manufacturingModeStatus ==
+ "xyz.openbmc_project.Control.Security."
+ "SpecialMode.Modes.Manufacturing")
+ {
+ manufacturingMode = true;
+ }
+ if (validateUnsecureFeature == true)
+ {
+ if (manufacturingModeStatus ==
+ "xyz.openbmc_project.Control.Security."
+ "SpecialMode.Modes.ValidationUnsecure")
+ {
+ manufacturingMode = true;
+ }
+ }
+ });
+
+ return;
+}
+
+bool getManufacturingMode()
+{
+ return manufacturingMode;
+}
\ No newline at end of file