| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 1 | #pragma once | 
|  | 2 |  | 
| Gunnar Mills | ef4781f | 2017-04-19 11:28:24 -0500 | [diff] [blame] | 3 | #include "xyz/openbmc_project/Common/FilePath/server.hpp" | 
| Justin Ledford | 054bb0b | 2022-03-15 15:46:58 -0700 | [diff] [blame] | 4 | #include "xyz/openbmc_project/Inventory/Decorator/Compatible/server.hpp" | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 5 | #include "xyz/openbmc_project/Object/Delete/server.hpp" | 
| Chanh Nguyen | 1fd6ddd | 2021-01-06 11:09:09 +0700 | [diff] [blame] | 6 | #include "xyz/openbmc_project/Software/ExtendedVersion/server.hpp" | 
| Gunnar Mills | b0ce996 | 2018-09-07 13:39:10 -0500 | [diff] [blame] | 7 | #include "xyz/openbmc_project/Software/Version/server.hpp" | 
|  | 8 |  | 
| Gunnar Mills | b0ce996 | 2018-09-07 13:39:10 -0500 | [diff] [blame] | 9 | #include <sdbusplus/bus.hpp> | 
| Adriana Kobylak | 58aa750 | 2020-06-08 11:12:11 -0500 | [diff] [blame] | 10 |  | 
|  | 11 | #include <functional> | 
| Andrew Geissler | 9155b71 | 2020-05-16 13:04:44 -0500 | [diff] [blame] | 12 | #include <string> | 
| Justin Ledford | 054bb0b | 2022-03-15 15:46:58 -0700 | [diff] [blame] | 13 | #include <vector> | 
| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 14 |  | 
|  | 15 | namespace phosphor | 
|  | 16 | { | 
|  | 17 | namespace software | 
|  | 18 | { | 
|  | 19 | namespace manager | 
|  | 20 | { | 
|  | 21 |  | 
| Leonel Gonzalez | e423368 | 2017-07-07 14:38:25 -0500 | [diff] [blame] | 22 | typedef std::function<void(std::string)> eraseFunc; | 
|  | 23 |  | 
| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 24 | using VersionInherit = sdbusplus::server::object::object< | 
| Chanh Nguyen | 1fd6ddd | 2021-01-06 11:09:09 +0700 | [diff] [blame] | 25 | sdbusplus::xyz::openbmc_project::Software::server::ExtendedVersion, | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 26 | sdbusplus::xyz::openbmc_project::Software::server::Version, | 
| Justin Ledford | 054bb0b | 2022-03-15 15:46:58 -0700 | [diff] [blame] | 27 | sdbusplus::xyz::openbmc_project::Common::server::FilePath, | 
|  | 28 | sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Compatible>; | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 29 | using DeleteInherit = sdbusplus::server::object::object< | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 30 | sdbusplus::xyz::openbmc_project::Object::server::Delete>; | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 31 |  | 
|  | 32 | class Version; | 
|  | 33 | class Delete; | 
|  | 34 |  | 
|  | 35 | /** @class Delete | 
|  | 36 | *  @brief OpenBMC Delete implementation. | 
|  | 37 | *  @details A concrete implementation for xyz.openbmc_project.Object.Delete | 
|  | 38 | *  D-Bus API. | 
|  | 39 | */ | 
|  | 40 | class Delete : public DeleteInherit | 
|  | 41 | { | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 42 | public: | 
|  | 43 | /** @brief Constructs Delete. | 
|  | 44 | * | 
|  | 45 | *  @param[in] bus    - The D-Bus bus object | 
|  | 46 | *  @param[in] path   - The D-Bus object path | 
|  | 47 | *  @param[in] parent - Parent object. | 
|  | 48 | */ | 
|  | 49 | Delete(sdbusplus::bus::bus& bus, const std::string& path, Version& parent) : | 
| Lei YU | 29d84b0 | 2020-02-13 15:13:09 +0800 | [diff] [blame] | 50 | DeleteInherit(bus, path.c_str(), action::emit_interface_added), | 
|  | 51 | parent(parent) | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 52 | { | 
| Lei YU | 29d84b0 | 2020-02-13 15:13:09 +0800 | [diff] [blame] | 53 | // Empty | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 54 | } | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 55 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 56 | /** @brief delete the D-Bus object. */ | 
|  | 57 | void delete_() override; | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 58 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 59 | private: | 
|  | 60 | /** @brief Parent Object. */ | 
|  | 61 | Version& parent; | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 62 | }; | 
| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 63 |  | 
|  | 64 | /** @class Version | 
|  | 65 | *  @brief OpenBMC version software management implementation. | 
|  | 66 | *  @details A concrete implementation for xyz.openbmc_project.Software.Version | 
| Gunnar Mills | a4fcb68 | 2017-10-06 13:14:12 -0500 | [diff] [blame] | 67 | *  D-Bus API. | 
| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 68 | */ | 
|  | 69 | class Version : public VersionInherit | 
|  | 70 | { | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 71 | public: | 
|  | 72 | /** @brief Constructs Version Software Manager | 
|  | 73 | * | 
| Justin Ledford | 054bb0b | 2022-03-15 15:46:58 -0700 | [diff] [blame] | 74 | * @param[in] bus             - The D-Bus bus object | 
|  | 75 | * @param[in] objPath         - The D-Bus object path | 
|  | 76 | * @param[in] versionString   - The version string | 
|  | 77 | * @param[in] versionPurpose  - The version purpose | 
|  | 78 | * @param[in] extVersion      - The extended version | 
|  | 79 | * @param[in] filePath        - The image filesystem path | 
|  | 80 | * @param[in] compatibleNames - The device compatibility names | 
|  | 81 | * @param[in] callback        - The eraseFunc callback | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 82 | */ | 
|  | 83 | Version(sdbusplus::bus::bus& bus, const std::string& objPath, | 
|  | 84 | const std::string& versionString, VersionPurpose versionPurpose, | 
| Lei YU | b412bd1 | 2021-03-23 20:01:28 +0800 | [diff] [blame] | 85 | const std::string& extVersion, const std::string& filePath, | 
| Justin Ledford | 054bb0b | 2022-03-15 15:46:58 -0700 | [diff] [blame] | 86 | const std::vector<std::string>& compatibleNames, eraseFunc callback, | 
|  | 87 | const std::string& id) : | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 88 | VersionInherit(bus, (objPath).c_str(), true), | 
| Adriana Kobylak | 59b640b | 2022-01-21 19:45:22 +0000 | [diff] [blame] | 89 | eraseCallback(callback), id(id), versionStr(versionString) | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 90 | { | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 91 | // Set properties. | 
| Chanh Nguyen | 1fd6ddd | 2021-01-06 11:09:09 +0700 | [diff] [blame] | 92 | extendedVersion(extVersion); | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 93 | purpose(versionPurpose); | 
|  | 94 | version(versionString); | 
|  | 95 | path(filePath); | 
| Justin Ledford | 054bb0b | 2022-03-15 15:46:58 -0700 | [diff] [blame] | 96 | names(compatibleNames); | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 97 | // Emit deferred signal. | 
|  | 98 | emit_object_added(); | 
|  | 99 | } | 
| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 100 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 101 | /** | 
|  | 102 | * @brief Read the manifest file to get the value of the key. | 
|  | 103 | * | 
|  | 104 | * @return The value of the key. | 
|  | 105 | **/ | 
|  | 106 | static std::string getValue(const std::string& manifestFilePath, | 
|  | 107 | std::string key); | 
| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 108 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 109 | /** | 
| Justin Ledford | 054bb0b | 2022-03-15 15:46:58 -0700 | [diff] [blame] | 110 | * @brief Read the manifest file to get the values of the repeated key. | 
|  | 111 | * | 
|  | 112 | * @return The values of the repeated key. | 
|  | 113 | **/ | 
|  | 114 | static std::vector<std::string> | 
|  | 115 | getRepeatedValues(const std::string& manifestFilePath, std::string key); | 
|  | 116 |  | 
|  | 117 | /** | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 118 | * @brief Calculate the version id from the version string. | 
|  | 119 | * | 
|  | 120 | * @details The version id is a unique 8 hexadecimal digit id | 
|  | 121 | *          calculated from the version string. | 
|  | 122 | * | 
| Adriana Kobylak | 59b640b | 2022-01-21 19:45:22 +0000 | [diff] [blame] | 123 | * @param[in] versionWithSalt - The image's version string | 
|  | 124 | *                              (e.g. v1.99.10-19) plus an optional salt | 
|  | 125 | *                              string. | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 126 | * | 
|  | 127 | * @return The id. | 
|  | 128 | */ | 
| Adriana Kobylak | 59b640b | 2022-01-21 19:45:22 +0000 | [diff] [blame] | 129 | static std::string getId(const std::string& versionWithSalt); | 
| Gunnar Mills | cebd102 | 2017-04-17 16:10:15 -0500 | [diff] [blame] | 130 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 131 | /** | 
| Vijay Khemka | b7c062e | 2019-09-18 17:15:57 -0700 | [diff] [blame] | 132 | * @brief Get the active BMC machine name string. | 
|  | 133 | * | 
|  | 134 | * @param[in] releaseFilePath - The path to the file which contains | 
|  | 135 | *                              the release machine string. | 
|  | 136 | * | 
|  | 137 | * @return The machine name string (e.g. romulus, tiogapass). | 
|  | 138 | */ | 
|  | 139 | static std::string getBMCMachine(const std::string& releaseFilePath); | 
|  | 140 |  | 
|  | 141 | /** | 
| Chanh Nguyen | 1fd6ddd | 2021-01-06 11:09:09 +0700 | [diff] [blame] | 142 | * @brief Get the BMC Extended Version string. | 
|  | 143 | * | 
|  | 144 | * @param[in] releaseFilePath - The path to the file which contains | 
|  | 145 | *                              the release machine string. | 
|  | 146 | * | 
|  | 147 | * @return The extended version string. | 
|  | 148 | */ | 
|  | 149 | static std::string | 
|  | 150 | getBMCExtendedVersion(const std::string& releaseFilePath); | 
|  | 151 |  | 
|  | 152 | /** | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 153 | * @brief Get the active BMC version string. | 
|  | 154 | * | 
|  | 155 | * @param[in] releaseFilePath - The path to the file which contains | 
|  | 156 | *                              the release version string. | 
|  | 157 | * | 
|  | 158 | * @return The version string (e.g. v1.99.10-19). | 
|  | 159 | */ | 
|  | 160 | static std::string getBMCVersion(const std::string& releaseFilePath); | 
| Eddie James | 6d87371 | 2017-09-01 11:29:07 -0500 | [diff] [blame] | 161 |  | 
| Adriana Kobylak | 1e81f23 | 2022-01-18 22:28:47 +0000 | [diff] [blame] | 162 | /* @brief Check if this version is functional. | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 163 | * | 
| Adriana Kobylak | 1e81f23 | 2022-01-18 22:28:47 +0000 | [diff] [blame] | 164 | * @return - Returns the functional value. | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 165 | */ | 
| Adriana Kobylak | 1e81f23 | 2022-01-18 22:28:47 +0000 | [diff] [blame] | 166 | bool isFunctional() const | 
|  | 167 | { | 
|  | 168 | return functional; | 
|  | 169 | } | 
|  | 170 |  | 
|  | 171 | /** @brief Set the functional value. | 
|  | 172 | * @param[in] value - True or False | 
|  | 173 | */ | 
|  | 174 | void setFunctional(bool value) | 
|  | 175 | { | 
|  | 176 | functional = value; | 
|  | 177 | } | 
| Eddie James | 6d87371 | 2017-09-01 11:29:07 -0500 | [diff] [blame] | 178 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 179 | /** @brief Persistent Delete D-Bus object */ | 
|  | 180 | std::unique_ptr<Delete> deleteObject; | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 181 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 182 | /** @brief The parent's erase callback. */ | 
|  | 183 | eraseFunc eraseCallback; | 
| Saqib Khan | ee13e83 | 2017-10-23 12:53:11 -0500 | [diff] [blame] | 184 |  | 
| Adriana Kobylak | 59b640b | 2022-01-21 19:45:22 +0000 | [diff] [blame] | 185 | /** @brief The version ID of the object */ | 
|  | 186 | const std::string id; | 
|  | 187 |  | 
| Adriana Kobylak | 2285fe0 | 2018-02-27 15:36:59 -0600 | [diff] [blame] | 188 | private: | 
|  | 189 | /** @brief This Version's version string */ | 
|  | 190 | const std::string versionStr; | 
| Adriana Kobylak | 1e81f23 | 2022-01-18 22:28:47 +0000 | [diff] [blame] | 191 |  | 
|  | 192 | /** @brief If this version is the functional one */ | 
|  | 193 | bool functional = false; | 
| Gunnar Mills | 392f294 | 2017-04-12 11:04:37 -0500 | [diff] [blame] | 194 | }; | 
|  | 195 |  | 
|  | 196 | } // namespace manager | 
|  | 197 | } // namespace software | 
|  | 198 | } // namespace phosphor |