summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0025-Revert-Support-new-boot-override-setting-design.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0025-Revert-Support-new-boot-override-setting-design.patch')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0025-Revert-Support-new-boot-override-setting-design.patch723
1 files changed, 0 insertions, 723 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0025-Revert-Support-new-boot-override-setting-design.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0025-Revert-Support-new-boot-override-setting-design.patch
deleted file mode 100644
index e0664a350..000000000
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0025-Revert-Support-new-boot-override-setting-design.patch
+++ /dev/null
@@ -1,723 +0,0 @@
-From c6ed122a09b1e41b9eab0032ff428b8b1a999534 Mon Sep 17 00:00:00 2001
-From: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
-Date: Wed, 4 Aug 2021 15:50:34 -0700
-Subject: [PATCH] Revert "Support new boot override setting design"
-
-This reverts commit c21865c469cfc9dffdc15d87710293115cf6d9e4.
-
-Change-Id: Icfd03551dd9ea2fb216519d8ab05b92521838542
-Signed-off-by: Jae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
----
- redfish-core/lib/systems.hpp | 493 +++++++++++++++++------------------
- 1 file changed, 245 insertions(+), 248 deletions(-)
-
-diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
-index fc6e2c78fd1f..5ad065b3518a 100644
---- a/redfish-core/lib/systems.hpp
-+++ b/redfish-core/lib/systems.hpp
-@@ -769,8 +769,11 @@ inline int assignBootParameters(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- const std::string& rfSource,
- std::string& bootSource, std::string& bootMode)
- {
-- bootSource = "xyz.openbmc_project.Control.Boot.Source.Sources.Default";
-- bootMode = "xyz.openbmc_project.Control.Boot.Mode.Modes.Regular";
-+ // The caller has initialized the bootSource and bootMode to:
-+ // bootMode = "xyz.openbmc_project.Control.Boot.Mode.Modes.Regular";
-+ // bootSource = "xyz.openbmc_project.Control.Boot.Source.Sources.Default";
-+ // Only modify the bootSource/bootMode variable needed to achieve the
-+ // desired boot action.
-
- if (rfSource == "None")
- {
-@@ -917,14 +920,45 @@ inline void getBootProgress(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
- }
-
- /**
-- * @brief Retrieves boot override type over DBUS and fills out the response
-+ * @brief Checks if the current boot override state can be considered as
-+ * Disabled
- *
- * @param[in] aResp Shared pointer for generating response message.
- *
- * @return None.
- */
-+inline void
-+ checkIfOverrideIsDisabled(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
-+{
-+ // If the BootSourceOverrideTarget is still "None" at the end,
-+ // reset the BootSourceOverrideEnabled to indicate that
-+ // overrides are disabled
-+ if (aResp->res.jsonValue["Boot"]["BootSourceOverrideTarget"] == "None")
-+ {
-+ // If the BootSourceOverrideMode is supported we should
-+ // check if it is still "UEFI" too
-+ if (aResp->res.jsonValue["Boot"].contains("BootSourceOverrideMode"))
-+ {
-+ if (aResp->res.jsonValue["Boot"]["BootSourceOverrideMode"] !=
-+ "UEFI")
-+ {
-+ return;
-+ }
-+ }
-+ aResp->res.jsonValue["Boot"]["BootSourceOverrideEnabled"] = "Disabled";
-+ }
-+}
-
--inline void getBootOverrideType(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
-+/**
-+ * @brief Retrieves boot type over DBUS and fills out the response
-+ *
-+ * @param[in] aResp Shared pointer for generating response message.
-+ * @param[in] bootDbusObj The dbus object to query for boot properties.
-+ *
-+ * @return None.
-+ */
-+inline void getBootType(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-+ const std::string& bootDbusObj)
- {
- crow::connections::systemBus->async_method_call(
- [aResp](const boost::system::error_code ec,
-@@ -932,6 +966,12 @@ inline void getBootOverrideType(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
- if (ec)
- {
- // not an error, don't have to have the interface
-+
-+ // Support Disabled override state in a way:
-+ // "BootSourceOverrideEnabled=Disabled" =
-+ // "BootSourceOverrideMode=UEFI" +
-+ // "BootSourceOverrideTarget=None"
-+ checkIfOverrideIsDisabled(aResp);
- return;
- }
-
-@@ -958,26 +998,31 @@ inline void getBootOverrideType(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
- }
-
- aResp->res.jsonValue["Boot"]["BootSourceOverrideMode"] = rfType;
-+
-+ // Support Disabled override state in a way:
-+ // "BootSourceOverrideEnabled=Disabled" =
-+ // "BootSourceOverrideMode=UEFI" + "BootSourceOverrideTarget=None"
-+ checkIfOverrideIsDisabled(aResp);
- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-+ "xyz.openbmc_project.Settings", bootDbusObj,
- "org.freedesktop.DBus.Properties", "Get",
- "xyz.openbmc_project.Control.Boot.Type", "BootType");
- }
-
- /**
-- * @brief Retrieves boot override mode over DBUS and fills out the response
-+ * @brief Retrieves boot mode over DBUS and fills out the response
- *
- * @param[in] aResp Shared pointer for generating response message.
-+ * @param[in] bootDbusObj The dbus object to query for boot properties.
- *
- * @return None.
- */
--
--inline void getBootOverrideMode(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
-+inline void getBootMode(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-+ const std::string& bootDbusObj)
- {
- crow::connections::systemBus->async_method_call(
-- [aResp](const boost::system::error_code ec,
-- const std::variant<std::string>& bootMode) {
-+ [aResp, bootDbusObj](const boost::system::error_code ec,
-+ const std::variant<std::string>& bootMode) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
-@@ -1010,27 +1055,39 @@ inline void getBootOverrideMode(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
- rfMode;
- }
- }
-+
-+ // Get BootType inside this async call as we need all of the
-+ // BootSource/BootMode/BootType to support
-+ // "BootSourceOverrideEnabled"="Disabled" state.
-+ getBootType(aResp, bootDbusObj);
- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-+ "xyz.openbmc_project.Settings", bootDbusObj,
- "org.freedesktop.DBus.Properties", "Get",
- "xyz.openbmc_project.Control.Boot.Mode", "BootMode");
- }
-
- /**
-- * @brief Retrieves boot override source over DBUS
-+ * @brief Retrieves boot source over DBUS
- *
- * @param[in] aResp Shared pointer for generating response message.
-+ * @param[in] oneTimeEnable Boolean to indicate boot properties are one-time.
- *
- * @return None.
- */
--
--inline void
-- getBootOverrideSource(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
-+inline void getBootSource(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-+ bool oneTimeEnabled)
- {
-+ std::string bootDbusObj =
-+ oneTimeEnabled ? "/xyz/openbmc_project/control/host0/boot/one_time"
-+ : "/xyz/openbmc_project/control/host0/boot";
-+
-+ BMCWEB_LOG_DEBUG << "Is one time: " << oneTimeEnabled;
-+ aResp->res.jsonValue["Boot"]["BootSourceOverrideEnabled"] =
-+ (oneTimeEnabled) ? "Once" : "Continuous";
-+
- crow::connections::systemBus->async_method_call(
-- [aResp](const boost::system::error_code ec,
-- const std::variant<std::string>& bootSource) {
-+ [aResp, bootDbusObj](const boost::system::error_code ec,
-+ const std::variant<std::string>& bootSource) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
-@@ -1057,43 +1114,32 @@ inline void
-
- // Get BootMode as BootSourceOverrideTarget is constructed
- // from both BootSource and BootMode
-- getBootOverrideMode(aResp);
-+ getBootMode(aResp, bootDbusObj);
- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-+ "xyz.openbmc_project.Settings", bootDbusObj,
- "org.freedesktop.DBus.Properties", "Get",
- "xyz.openbmc_project.Control.Boot.Source", "BootSource");
- }
-
- /**
-- * @brief This functions abstracts all the logic behind getting a
-- * "BootSourceOverrideEnabled" property from an overall boot override enable
-- * state
-+ * @brief Retrieves "One time" enabled setting over DBUS and calls function to
-+ * get boot source and boot mode.
- *
- * @param[in] aResp Shared pointer for generating response message.
- *
- * @return None.
- */
--
--inline void
-- processBootOverrideEnable(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-- const bool bootOverrideEnableSetting)
-+inline void getBootProperties(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
- {
-- if (!bootOverrideEnableSetting)
-- {
-- aResp->res.jsonValue["Boot"]["BootSourceOverrideEnabled"] = "Disabled";
-- return;
-- }
-+ BMCWEB_LOG_DEBUG << "Get boot information.";
-
-- // If boot source override is enabled, we need to check 'one_time'
-- // property to set a correct value for the "BootSourceOverrideEnabled"
- crow::connections::systemBus->async_method_call(
- [aResp](const boost::system::error_code ec,
- const std::variant<bool>& oneTime) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
-- messages::internalError(aResp->res);
-+ // not an error, don't have to have the interface
- return;
- }
-
-@@ -1104,19 +1150,7 @@ inline void
- messages::internalError(aResp->res);
- return;
- }
--
-- bool oneTimeSetting = *oneTimePtr;
--
-- if (oneTimeSetting)
-- {
-- aResp->res.jsonValue["Boot"]["BootSourceOverrideEnabled"] =
-- "Once";
-- }
-- else
-- {
-- aResp->res.jsonValue["Boot"]["BootSourceOverrideEnabled"] =
-- "Continuous";
-- }
-+ getBootSource(aResp, *oneTimePtr);
- },
- "xyz.openbmc_project.Settings",
- "/xyz/openbmc_project/control/host0/boot/one_time",
-@@ -1124,60 +1158,6 @@ inline void
- "xyz.openbmc_project.Object.Enable", "Enabled");
- }
-
--/**
-- * @brief Retrieves boot override enable over DBUS
-- *
-- * @param[in] aResp Shared pointer for generating response message.
-- *
-- * @return None.
-- */
--
--inline void
-- getBootOverrideEnable(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
--{
-- crow::connections::systemBus->async_method_call(
-- [aResp](const boost::system::error_code ec,
-- const std::variant<bool>& bootOverrideEnable) {
-- if (ec)
-- {
-- BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
-- messages::internalError(aResp->res);
-- return;
-- }
--
-- const bool* bootOverrideEnablePtr =
-- std::get_if<bool>(&bootOverrideEnable);
--
-- if (!bootOverrideEnablePtr)
-- {
-- messages::internalError(aResp->res);
-- return;
-- }
--
-- processBootOverrideEnable(aResp, *bootOverrideEnablePtr);
-- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-- "org.freedesktop.DBus.Properties", "Get",
-- "xyz.openbmc_project.Object.Enable", "Enabled");
--}
--
--/**
-- * @brief Retrieves boot source override properties
-- *
-- * @param[in] aResp Shared pointer for generating response message.
-- *
-- * @return None.
-- */
--inline void getBootProperties(const std::shared_ptr<bmcweb::AsyncResp>& aResp)
--{
-- BMCWEB_LOG_DEBUG << "Get boot information.";
--
-- getBootOverrideSource(aResp);
-- getBootOverrideType(aResp);
-- getBootOverrideEnable(aResp);
--}
--
- /**
- * @brief Retrieves the Last Reset Time
- *
-@@ -1479,47 +1459,59 @@ inline void getTrustedModuleRequiredToBoot(
- * @brief Sets boot properties into DBUS object(s).
- *
- * @param[in] aResp Shared pointer for generating response message.
-+ * @param[in] overrideEnabled The source override "enable".
-+ * @param[in] bootObj Path to the DBUS object.
- * @param[in] bootType The boot type to set.
- * @return Integer error code.
- */
- inline void setBootType(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-+ const bool overrideEnabled, const std::string& bootObj,
- const std::optional<std::string>& bootType)
- {
-- std::string bootTypeStr;
--
-- if (!bootType)
-- {
-- return;
-- }
-+ std::string bootTypeStr = "xyz.openbmc_project.Control.Boot.Type.Types.EFI";
-
-- // Source target specified
-- BMCWEB_LOG_DEBUG << "Boot type: " << *bootType;
-- // Figure out which DBUS interface and property to use
-- if (*bootType == "Legacy")
-- {
-- bootTypeStr = "xyz.openbmc_project.Control.Boot.Type.Types.Legacy";
-- }
-- else if (*bootType == "UEFI")
-+ if (bootType && overrideEnabled)
- {
-- bootTypeStr = "xyz.openbmc_project.Control.Boot.Type.Types.EFI";
-- }
-- else
-- {
-- BMCWEB_LOG_DEBUG << "Invalid property value for "
-- "BootSourceOverrideMode: "
-- << *bootType;
-- messages::propertyValueNotInList(aResp->res, *bootType,
-- "BootSourceOverrideMode");
-- return;
-+ // Source target specified
-+ BMCWEB_LOG_DEBUG << "Boot type: " << *bootType;
-+ // Figure out which DBUS interface and property to use
-+ if (*bootType == "Legacy")
-+ {
-+ bootTypeStr = "xyz.openbmc_project.Control.Boot.Type.Types.Legacy";
-+ }
-+ else if (*bootType == "UEFI")
-+ {
-+ bootTypeStr = "xyz.openbmc_project.Control.Boot.Type.Types.EFI";
-+ }
-+ else
-+ {
-+ BMCWEB_LOG_DEBUG << "Invalid property value for "
-+ "BootSourceOverrideMode: "
-+ << *bootType;
-+ messages::propertyValueNotInList(aResp->res, *bootType,
-+ "BootSourceOverrideMode");
-+ return;
-+ }
- }
-
- // Act on validated parameters
- BMCWEB_LOG_DEBUG << "DBUS boot type: " << bootTypeStr;
-
- crow::connections::systemBus->async_method_call(
-- [aResp](const boost::system::error_code ec) {
-+ [aResp, bootType](const boost::system::error_code ec) {
- if (ec)
- {
-+ if (!bootType)
-+ {
-+ // If bootType wasn't explicitly present in the incoming
-+ // message don't output error. The error could come from a
-+ // fact that the BootType interface may be not present in
-+ // the settings object. It could happen because this
-+ // interface is not relevant for some Host architectures
-+ // (for example POWER).
-+ return;
-+ }
-+
- BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
- if (ec.value() == boost::asio::error::host_unreachable)
- {
-@@ -1531,8 +1523,7 @@ inline void setBootType(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- }
- BMCWEB_LOG_DEBUG << "Boot type update done.";
- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-+ "xyz.openbmc_project.Settings", bootObj,
- "org.freedesktop.DBus.Properties", "Set",
- "xyz.openbmc_project.Control.Boot.Type", "BootType",
- std::variant<std::string>(bootTypeStr));
-@@ -1542,48 +1533,42 @@ inline void setBootType(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- * @brief Sets boot properties into DBUS object(s).
- *
- * @param[in] aResp Shared pointer for generating response message.
-- * @param[in] bootType The boot type to set.
-+ * @param[in] overrideEnabled The source override "enable".
-+ * @param[in] bootObj Path to the DBUS object.
-+ * @param[in] bootSource The boot source to set.
-+ *
- * @return Integer error code.
- */
--inline void setBootEnable(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-- const std::optional<std::string>& bootEnable)
-+inline void setBootModeOrSource(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-+ const bool overrideEnabled,
-+ const std::string& bootObj,
-+ const std::optional<std::string>& bootSource)
- {
-- if (!bootEnable)
-- {
-- return;
-- }
-- // Source target specified
-- BMCWEB_LOG_DEBUG << "Boot enable: " << *bootEnable;
-+ std::string bootSourceStr =
-+ "xyz.openbmc_project.Control.Boot.Source.Sources.Default";
-+ std::string bootModeStr =
-+ "xyz.openbmc_project.Control.Boot.Mode.Modes.Regular";
-
-- bool bootOverrideEnable = false;
-- bool bootOverridePersistent = false;
-- // Figure out which DBUS interface and property to use
-- if (*bootEnable == "Disabled")
-- {
-- bootOverrideEnable = false;
-- }
-- else if (*bootEnable == "Once")
-- {
-- bootOverrideEnable = true;
-- bootOverridePersistent = false;
-- }
-- else if (*bootEnable == "Continuous")
-+ if (bootSource && overrideEnabled)
- {
-- bootOverrideEnable = true;
-- bootOverridePersistent = true;
-- }
-- else
-- {
-- BMCWEB_LOG_DEBUG << "Invalid property value for "
-- "BootSourceOverrideEnabled: "
-- << *bootEnable;
-- messages::propertyValueNotInList(aResp->res, *bootEnable,
-- "BootSourceOverrideEnabled");
-- return;
-+ // Source target specified
-+ BMCWEB_LOG_DEBUG << "Boot source: " << *bootSource;
-+ // Figure out which DBUS interface and property to use
-+ if (assignBootParameters(aResp, *bootSource, bootSourceStr,
-+ bootModeStr))
-+ {
-+ BMCWEB_LOG_DEBUG
-+ << "Invalid property value for BootSourceOverrideTarget: "
-+ << *bootSource;
-+ messages::propertyValueNotInList(aResp->res, *bootSource,
-+ "BootSourceTargetOverride");
-+ return;
-+ }
- }
-
- // Act on validated parameters
-- BMCWEB_LOG_DEBUG << "DBUS boot override enable: " << bootOverrideEnable;
-+ BMCWEB_LOG_DEBUG << "DBUS boot source: " << bootSourceStr;
-+ BMCWEB_LOG_DEBUG << "DBUS boot mode: " << bootModeStr;
-
- crow::connections::systemBus->async_method_call(
- [aResp](const boost::system::error_code ec) {
-@@ -1593,23 +1578,12 @@ inline void setBootEnable(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- messages::internalError(aResp->res);
- return;
- }
-- BMCWEB_LOG_DEBUG << "Boot override enable update done.";
-+ BMCWEB_LOG_DEBUG << "Boot source update done.";
- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-+ "xyz.openbmc_project.Settings", bootObj,
- "org.freedesktop.DBus.Properties", "Set",
-- "xyz.openbmc_project.Object.Enable", "Enabled",
-- std::variant<bool>(bootOverrideEnable));
--
-- if (!bootOverrideEnable)
-- {
-- return;
-- }
--
-- // In case boot override is enabled we need to set correct value for the
-- // 'one_time' enable DBus interface
-- BMCWEB_LOG_DEBUG << "DBUS boot override persistent: "
-- << bootOverridePersistent;
-+ "xyz.openbmc_project.Control.Boot.Source", "BootSource",
-+ std::variant<std::string>(bootSourceStr));
-
- crow::connections::systemBus->async_method_call(
- [aResp](const boost::system::error_code ec) {
-@@ -1619,86 +1593,45 @@ inline void setBootEnable(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- messages::internalError(aResp->res);
- return;
- }
-- BMCWEB_LOG_DEBUG << "Boot one_time update done.";
-+ BMCWEB_LOG_DEBUG << "Boot mode update done.";
- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot/one_time",
-+ "xyz.openbmc_project.Settings", bootObj,
- "org.freedesktop.DBus.Properties", "Set",
-- "xyz.openbmc_project.Object.Enable", "Enabled",
-- std::variant<bool>(!bootOverridePersistent));
-+ "xyz.openbmc_project.Control.Boot.Mode", "BootMode",
-+ std::variant<std::string>(bootModeStr));
- }
-
- /**
-- * @brief Sets boot properties into DBUS object(s).
-+ * @brief Sets "One time" enabled setting into DBUS object
- *
-- * @param[in] aResp Shared pointer for generating response message.
-- * @param[in] bootSource The boot source to set.
-+ * @param[in] aResp Shared pointer for generating response message.
-+ * @param[in] oneTime Enable property for one-time object
- *
- * @return Integer error code.
- */
--inline void setBootModeOrSource(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-- const std::optional<std::string>& bootSource)
-+inline void setOneTime(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-+ bool oneTime)
- {
-- std::string bootSourceStr;
-- std::string bootModeStr;
--
-- if (!bootSource)
-- {
-- return;
-- }
--
-- // Source target specified
-- BMCWEB_LOG_DEBUG << "Boot source: " << *bootSource;
-- // Figure out which DBUS interface and property to use
-- if (assignBootParameters(aResp, *bootSource, bootSourceStr, bootModeStr))
-- {
-- BMCWEB_LOG_DEBUG
-- << "Invalid property value for BootSourceOverrideTarget: "
-- << *bootSource;
-- messages::propertyValueNotInList(aResp->res, *bootSource,
-- "BootSourceTargetOverride");
-- return;
-- }
--
-- // Act on validated parameters
-- BMCWEB_LOG_DEBUG << "DBUS boot source: " << bootSourceStr;
-- BMCWEB_LOG_DEBUG << "DBUS boot mode: " << bootModeStr;
--
- crow::connections::systemBus->async_method_call(
-- [aResp](const boost::system::error_code ec) {
-+ [aResp{aResp}](const boost::system::error_code ec) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
- messages::internalError(aResp->res);
- return;
- }
-- BMCWEB_LOG_DEBUG << "Boot source update done.";
-+ BMCWEB_LOG_DEBUG << "Boot enable update done.";
- },
- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-- "org.freedesktop.DBus.Properties", "Set",
-- "xyz.openbmc_project.Control.Boot.Source", "BootSource",
-- std::variant<std::string>(bootSourceStr));
--
-- crow::connections::systemBus->async_method_call(
-- [aResp](const boost::system::error_code ec) {
-- if (ec)
-- {
-- BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
-- messages::internalError(aResp->res);
-- return;
-- }
-- BMCWEB_LOG_DEBUG << "Boot mode update done.";
-- },
-- "xyz.openbmc_project.Settings",
-- "/xyz/openbmc_project/control/host0/boot",
-+ "/xyz/openbmc_project/control/host0/boot/one_time",
- "org.freedesktop.DBus.Properties", "Set",
-- "xyz.openbmc_project.Control.Boot.Mode", "BootMode",
-- std::variant<std::string>(bootModeStr));
-+ "xyz.openbmc_project.Object.Enable", "Enabled",
-+ std::variant<bool>(oneTime));
- }
-
- /**
-- * @brief Sets Boot source override properties.
-+ * @brief Retrieves "One time" enabled setting over DBUS and calls function to
-+ * set boot source/boot mode properties.
- *
- * @param[in] aResp Shared pointer for generating response message.
- * @param[in] bootSource The boot source from incoming RF request.
-@@ -1707,17 +1640,81 @@ inline void setBootModeOrSource(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- *
- * @return Integer error code.
- */
--
--inline void setBootProperties(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-- const std::optional<std::string>& bootSource,
-- const std::optional<std::string>& bootType,
-- const std::optional<std::string>& bootEnable)
-+inline void
-+ setBootSourceProperties(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
-+ std::optional<std::string> bootSource,
-+ std::optional<std::string> bootType,
-+ std::optional<std::string> bootEnable)
- {
- BMCWEB_LOG_DEBUG << "Set boot information.";
-
-- setBootModeOrSource(aResp, bootSource);
-- setBootType(aResp, bootType);
-- setBootEnable(aResp, bootEnable);
-+ crow::connections::systemBus->async_method_call(
-+ [aResp, bootSource{std::move(bootSource)},
-+ bootType{std::move(bootType)},
-+ bootEnable{std::move(bootEnable)}](const boost::system::error_code ec,
-+ const std::variant<bool>& oneTime) {
-+ if (ec)
-+ {
-+ BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
-+ messages::internalError(aResp->res);
-+ return;
-+ }
-+
-+ const bool* oneTimePtr = std::get_if<bool>(&oneTime);
-+
-+ if (!oneTimePtr)
-+ {
-+ messages::internalError(aResp->res);
-+ return;
-+ }
-+
-+ BMCWEB_LOG_DEBUG << "Got one time: " << *oneTimePtr;
-+
-+ bool oneTimeSetting = *oneTimePtr;
-+ bool overrideEnabled = true;
-+
-+ // Validate incoming parameters
-+ if (bootEnable)
-+ {
-+ if (*bootEnable == "Once")
-+ {
-+ oneTimeSetting = true;
-+ }
-+ else if (*bootEnable == "Continuous")
-+ {
-+ oneTimeSetting = false;
-+ }
-+ else if (*bootEnable == "Disabled")
-+ {
-+ BMCWEB_LOG_DEBUG << "Boot source override will be disabled";
-+ oneTimeSetting = false;
-+ overrideEnabled = false;
-+ }
-+ else
-+ {
-+ BMCWEB_LOG_DEBUG << "Unsupported value for "
-+ "BootSourceOverrideEnabled: "
-+ << *bootEnable;
-+ messages::propertyValueNotInList(
-+ aResp->res, *bootEnable, "BootSourceOverrideEnabled");
-+ return;
-+ }
-+ }
-+
-+ std::string bootObj = "/xyz/openbmc_project/control/host0/boot";
-+ if (oneTimeSetting)
-+ {
-+ bootObj += "/one_time";
-+ }
-+
-+ setBootModeOrSource(aResp, overrideEnabled, bootObj, bootSource);
-+ setBootType(aResp, overrideEnabled, bootObj, bootType);
-+ setOneTime(aResp, oneTimeSetting);
-+ },
-+ "xyz.openbmc_project.Settings",
-+ "/xyz/openbmc_project/control/host0/boot/one_time",
-+ "org.freedesktop.DBus.Properties", "Get",
-+ "xyz.openbmc_project.Object.Enable", "Enabled");
- }
-
- /**
-@@ -2806,11 +2803,11 @@ inline void requestRoutesSystems(App& app)
- {
- return;
- }
--
- if (bootSource || bootType || bootEnable)
- {
-- setBootProperties(asyncResp, bootSource, bootType,
-- bootEnable);
-+ setBootSourceProperties(
-+ asyncResp, std::move(bootSource),
-+ std::move(bootType), std::move(bootEnable));
- }
- if (automaticRetryConfig)
- {
---
-2.17.1
-