1 #pragma once 2 3 #include <sdbusplus/server.hpp> 4 #include "activation.hpp" 5 #include "version.hpp" 6 7 namespace phosphor 8 { 9 namespace software 10 { 11 namespace updater 12 { 13 14 namespace MatchRules = sdbusplus::bus::match::rules; 15 16 /** @class ItemUpdater 17 * @brief Manages the activation of the BMC version items. 18 */ 19 class ItemUpdater 20 { 21 public: 22 ItemUpdater() = delete; 23 ~ItemUpdater() = default; 24 ItemUpdater(const ItemUpdater&) = delete; 25 ItemUpdater& operator=(const ItemUpdater&) = delete; 26 ItemUpdater(ItemUpdater&&) = delete; 27 ItemUpdater& operator=(ItemUpdater&&) = delete; 28 29 /* 30 * @brief Types of Activation status for image validation. 31 */ 32 enum class ActivationStatus 33 { 34 ready, 35 invalid, 36 active 37 }; 38 39 /** @brief Constructs ItemUpdater 40 * 41 * @param[in] bus - The Dbus bus object 42 */ 43 ItemUpdater(sdbusplus::bus::bus& bus) : 44 bus(bus), 45 versionMatch( 46 bus, 47 MatchRules::interfacesAdded() + 48 MatchRules::path("/xyz/openbmc_project/software"), 49 std::bind( 50 std::mem_fn(&ItemUpdater::createActivation), 51 this, 52 std::placeholders::_1)) 53 { 54 processBMCImage(); 55 }; 56 57 /** @brief Sets the given priority free by incrementing 58 * any existing priority with the same value by 1 59 * 60 * @param[in] value - The priority that needs to be set free. 61 * 62 * @return None 63 */ 64 void freePriority(uint8_t value); 65 66 /** 67 * @brief Create and populate the active BMC Version. 68 */ 69 void processBMCImage(); 70 71 private: 72 /** @brief Callback function for Software.Version match. 73 * @details Creates an Activation dbus object. 74 * 75 * @param[in] msg - Data associated with subscribed signal 76 */ 77 void createActivation(sdbusplus::message::message& msg); 78 79 /** 80 * @brief Validates the presence of SquashFS iamge in the image dir. 81 * 82 * @param[in] filePath - The path to the image dir. 83 * @param[out] result - ActivationStatus Enum. 84 * ready if validation was successful. 85 * invalid if validation fail. 86 * active if image is the current version. 87 * 88 */ 89 ActivationStatus validateSquashFSImage(const std::string& filePath); 90 91 /** @brief Persistent sdbusplus DBus bus connection. */ 92 sdbusplus::bus::bus& bus; 93 94 /** @brief Persistent map of Activation dbus objects and their 95 * version id */ 96 std::map<std::string, std::unique_ptr<Activation>> activations; 97 98 /** @brief Persistent map of Version dbus objects and their 99 * version id */ 100 std::map<std::string, std::unique_ptr<phosphor::software:: 101 manager::Version>> versions; 102 103 /** @brief sdbusplus signal match for Software.Version */ 104 sdbusplus::bus::match_t versionMatch; 105 106 }; 107 108 109 110 } // namespace updater 111 } // namespace software 112 } // namespace phosphor 113