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/include/Utils.hpp b/include/Utils.hpp
index d2ab5ca..01d941f 100644
--- a/include/Utils.hpp
+++ b/include/Utils.hpp
@@ -316,3 +316,5 @@
splitFileName(const std::filesystem::path& filePath);
std::optional<double> readFile(const std::string& thresholdFile,
const double& scaleFactor);
+void setupManufacturingModeMatch(sdbusplus::asio::connection& conn);
+bool getManufacturingMode();
diff --git a/include/dbus-sensor_config.h.in b/include/dbus-sensor_config.h.in
new file mode 100644
index 0000000..0e07685
--- /dev/null
+++ b/include/dbus-sensor_config.h.in
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <cstdint>
+
+// clang-format off
+constexpr const bool validateUnsecureFeature = @VALIDATION_UNSECURE_FEATURE@;
+
+constexpr const bool insecureSensorOverride = @INSECURE_UNRESTRICTED_SENSOR_OVERRIDE@;
+// clang-format on
\ No newline at end of file
diff --git a/include/meson.build b/include/meson.build
new file mode 100644
index 0000000..4810de7
--- /dev/null
+++ b/include/meson.build
@@ -0,0 +1,6 @@
+conf_data = configuration_data()
+conf_data.set10('VALIDATION_UNSECURE_FEATURE', get_option('validate-unsecure-feature').enabled())
+conf_data.set10('INSECURE_UNRESTRICTED_SENSOR_OVERRIDE', get_option('insecure-sensor-override').enabled())
+configure_file(input: 'dbus-sensor_config.h.in',
+ output: 'dbus-sensor_config.h',
+ configuration: conf_data)
\ No newline at end of file
diff --git a/include/sensor.hpp b/include/sensor.hpp
index d1fb22e..b98241b 100644
--- a/include/sensor.hpp
+++ b/include/sensor.hpp
@@ -1,4 +1,5 @@
#pragma once
+#include "dbus-sensor_config.h"
#include <SensorPaths.hpp>
#include <Thresholds.hpp>
@@ -39,12 +40,13 @@
Sensor(const std::string& name,
std::vector<thresholds::Threshold>&& thresholdData,
const std::string& configurationPath, const std::string& objectType,
- const double max, const double min,
+ bool isSettable, const double max, const double min,
std::shared_ptr<sdbusplus::asio::connection>& conn,
PowerState readState = PowerState::always) :
name(sensor_paths::escapePathForDbus(name)),
configurationPath(configurationPath), objectType(objectType),
- maxValue(max), minValue(min), thresholds(std::move(thresholdData)),
+ isSensorSettable(isSettable), maxValue(max), minValue(min),
+ thresholds(std::move(thresholdData)),
hysteresisTrigger((max - min) * 0.01),
hysteresisPublish((max - min) * 0.0001), dbusConnection(conn),
readState(readState), errCount(0),
@@ -57,6 +59,7 @@
std::string name;
std::string configurationPath;
std::string objectType;
+ bool isSensorSettable;
double maxValue;
double minValue;
std::vector<thresholds::Threshold> thresholds;
@@ -173,6 +176,18 @@
{
if (!internalSet)
{
+ if (insecureSensorOverride == false)
+ { // insecure sesnor override.
+ if (isSensorSettable == false)
+ { // sensor is not settable.
+ if (getManufacturingMode() == false)
+ { // manufacture mode is not enable.
+ throw sdbusplus::exception::SdBusError(
+ -EACCES, "Not allow set porperty value.");
+ }
+ }
+ }
+
oldValue = newValue;
overriddenState = true;
// check thresholds for external set