field mode: restore works on all systems
The restoreFieldModeStatus function previously read from a chip
that is not found on all systems. Changed it to read fieldmode
status using fw_printenv. Updated utils::executeCmd to return the
print output of the command it executes.
Tested:
On p10bmc running mmc chip:
- Set the fieldmode env variable to "true" and verified FieldModeEnabled
was set to true:
root@p10bmc:~# fw_setenv fieldmode true
root@p10bmc:~# systemctl restart xyz.openbmc_project.Software.BMC.Updater.service
root@p10bmc:~# busctl introspect xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software
...
xyz.openbmc_project.Control.FieldMode interface - -
.FieldModeEnabled property b true
- Set the fieldmode env variable to "false" (fw_setenv fieldmode false)
and also clear the variable (fw_setenv fieldmode) and verified
FieldModeEnabled was set to false with no error messages in the
journal:
root@p10bmc:~# fw_setenv fieldmode
root@p10bmc:~# systemctl restart xyz.openbmc_project.Software.BMC.Updater.service
root@p10bmc:~# busctl introspect xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software
...
xyz.openbmc_project.Control.FieldMode interface - -
.FieldModeEnabled property b false
Change-Id: Ib1b54d83f058015ff5967c445a40318a02baae92
Signed-off-by: Isaac Kurth <blisaac91@gmail.com>
Signed-off-by: Adriana Kobylak <anoo@linux.ibm.com>
diff --git a/utils.hpp b/utils.hpp
index af6dd98..be4fb2c 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -96,11 +96,10 @@
/**
* @brief Helper function to execute command in child process
- * @param[in] path - Fully qualified name of the executable to run
- * @param[in] args - Optional arguments
- * @return 0 on success
+ * @param[in] args - Executable plus optional arguments
+ * @return 0 and command output on success
*/
-int executeCmd(const char* path, char** args);
+std::pair<int, std::string> executeCmd(char** args);
} // namespace internal
@@ -108,14 +107,14 @@
* @brief Execute command in child process
* @param[in] path - Fully qualified name of the executable to run
* @param[in] args - Optional arguments
- * @return 0 on success
+ * @return 0 and command output on success
*/
template <typename... Arg>
-int execute(const char* path, Arg&&... args)
+std::pair<int, std::string> execute(const char* path, Arg&&... args)
{
auto argArray = internal::constructArgv(path, std::forward<Arg>(args)...);
- return internal::executeCmd(path, argArray.data());
+ return internal::executeCmd(argArray.data());
}
} // namespace utils