summaryrefslogtreecommitdiff
path: root/redfish-core/lib/bios.hpp
diff options
context:
space:
mode:
authorCarol Wang <wangkair@cn.ibm.com>2019-11-21 08:56:38 +0300
committerCarol Wang <wangkair@cn.ibm.com>2019-12-05 06:24:04 +0300
commitd82a3acd1abc04a13f90cef5234416c3e18da0e1 (patch)
treef8c3dfaaa16bc5a812c7a15ab1376bd18a2403ba /redfish-core/lib/bios.hpp
parent274dfe625f862e8ded2d4eb88dd856cf66bf54bf (diff)
downloadbmcweb-d82a3acd1abc04a13f90cef5234416c3e18da0e1.tar.xz
Redfish: Implement ResetBios action
This action resets the BIOS attributes to default. Tested: GET test: 1. $ curl -k -H "X-Auth-Token: $token" https://${bmc}/redfish/v1/Systems/system { ... "Bios": { "@odata.id": "/redfish/v1/Systems/system/Bios" }, ... } 2. $ curl -k -H "X-Auth-Token: $token" https://${bmc}/redfish/v1/Systems/system/Bios { "@odata.id": "/redfish/v1/Systems/system/Bios", "@odata.type": "#Bios.v1_1_0.Bios", "Actions": { "#Bios.ResetBios": { "target": "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios" } }, "Description": "BIOS Configuration Service", "Id": "BIOS", "Name": "BIOS Configuration" } POST test: 1. Change gard list: # ./gard list No GARD entries to display # ./gard create /Sys0/Node0/Proc1/EQ1/EX1/Core0 # ./gard list ID | Error | Type | Path ----------------------------------------------------------------------- 00000001 | 00000000 | Manual | /Sys0/Node0/Proc1/EQ1/EX1/Core0 ======================================================================= 2. Reset bios: # curl -k -H "X-Auth-Token: $token" -X POST https://${bmc}/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios 3. Check gard list again: # ./gard list No GARD entries to display Validator tool test: Counter({'pass': 3001, 'skipOptional': 2475, 'metadataNamespaces': 1605, 'passGet': 191, 'serviceNamespaces': 72, 'invalidPropertyValue': 10, 'passAction': 7, 'optionalAction': 6, 'warningPresent': 6, 'warnDeprecated': 2, 'unverifiedComplexAdditional': 1}) Validation has succeeded. Signed-off-by: Carol Wang <wangkair@cn.ibm.com> Change-Id: I0cba966bfde04566001b6df07ad15217f627c327
Diffstat (limited to 'redfish-core/lib/bios.hpp')
-rw-r--r--redfish-core/lib/bios.hpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/redfish-core/lib/bios.hpp b/redfish-core/lib/bios.hpp
new file mode 100644
index 0000000000..94f1cb98d1
--- /dev/null
+++ b/redfish-core/lib/bios.hpp
@@ -0,0 +1,73 @@
+#pragma once
+
+#include "node.hpp"
+
+namespace redfish
+{
+/**
+ * BiosService class supports handle get method for bios.
+ */
+class BiosService : public Node
+{
+ public:
+ BiosService(CrowApp &app) : Node(app, "/redfish/v1/Systems/system/Bios/")
+ {
+ entityPrivileges = {{boost::beast::http::verb::get, {{"Login"}}}};
+ }
+
+ private:
+ void doGet(crow::Response &res, const crow::Request &req,
+ const std::vector<std::string> &params) override
+ {
+ auto asyncResp = std::make_shared<AsyncResp>(res);
+
+ asyncResp->res.jsonValue["@odata.id"] =
+ "/redfish/v1/Systems/system/Bios";
+ asyncResp->res.jsonValue["@odata.type"] = "#Bios.v1_1_0.Bios";
+ asyncResp->res.jsonValue["Name"] = "BIOS Configuration";
+ asyncResp->res.jsonValue["Description"] = "BIOS Configuration Service";
+ asyncResp->res.jsonValue["Id"] = "BIOS";
+ asyncResp->res.jsonValue["Actions"]["#Bios.ResetBios"] = {
+ {"target",
+ "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios"}};
+ }
+};
+/**
+ * BiosReset class supports handle POST method for Reset bios.
+ * The class retrieves and sends data directly to D-Bus.
+ */
+class BiosReset : public Node
+{
+ public:
+ BiosReset(CrowApp &app) :
+ Node(app, "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios/")
+ {
+ entityPrivileges = {
+ {boost::beast::http::verb::post, {{"ConfigureManager"}}}};
+ }
+
+ private:
+ /**
+ * Function handles POST method request.
+ * Analyzes POST body message before sends Reset request data to D-Bus.
+ */
+ void doPost(crow::Response &res, const crow::Request &req,
+ const std::vector<std::string> &params) override
+ {
+ auto asyncResp = std::make_shared<AsyncResp>(res);
+
+ crow::connections::systemBus->async_method_call(
+ [asyncResp](const boost::system::error_code ec) {
+ if (ec)
+ {
+ BMCWEB_LOG_ERROR << "Failed to reset bios: " << ec;
+ messages::internalError(asyncResp->res);
+ return;
+ }
+ },
+ "org.open_power.Software.Host.Updater",
+ "/xyz/openbmc_project/software",
+ "xyz.openbmc_project.Common.FactoryReset", "Reset");
+ }
+};
+} // namespace redfish \ No newline at end of file