blob: fb8e9df1fb842828475d5e0ad48333385dad14ad [file] [log] [blame]
Gunnar Millsec1b41c2017-05-02 12:20:36 -05001#pragma once
2
3#include <sdbusplus/server.hpp>
4#include "activation.hpp"
Saqib Khan705f1bf2017-06-09 23:58:38 -05005#include "version.hpp"
Gunnar Millsec1b41c2017-05-02 12:20:36 -05006
7namespace phosphor
8{
9namespace software
10{
11namespace updater
12{
13
Patrick Williamse75d10f2017-05-30 16:56:32 -050014namespace MatchRules = sdbusplus::bus::match::rules;
15
Gunnar Millsec1b41c2017-05-02 12:20:36 -050016/** @class ItemUpdater
17 * @brief Manages the activation of the BMC version items.
18 */
19class 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
Saqib Khan35e83f32017-05-22 11:37:32 -050029 /*
30 * @brief Types of Activation status for image validation.
31 */
32 enum class ActivationStatus
33 {
34 ready,
35 invalid,
36 active
37 };
38
Gunnar Millsec1b41c2017-05-02 12:20:36 -050039 /** @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,
Patrick Williamse75d10f2017-05-30 16:56:32 -050047 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 {
Saqib Khanba239882017-05-26 08:41:54 -050054 processBMCImage();
Patrick Williamse75d10f2017-05-30 16:56:32 -050055 };
Gunnar Millsec1b41c2017-05-02 12:20:36 -050056
Saqib Khanba239882017-05-26 08:41:54 -050057 /**
58 * @brief Create and populate the active BMC Version.
59 */
60 void processBMCImage();
61
Gunnar Millsec1b41c2017-05-02 12:20:36 -050062 private:
63 /** @brief Callback function for Software.Version match.
64 * @details Creates an Activation dbus object.
65 *
66 * @param[in] msg - Data associated with subscribed signal
Gunnar Millsec1b41c2017-05-02 12:20:36 -050067 */
Patrick Williamse75d10f2017-05-30 16:56:32 -050068 void createActivation(sdbusplus::message::message& msg);
Gunnar Millsec1b41c2017-05-02 12:20:36 -050069
Saqib Khan35e83f32017-05-22 11:37:32 -050070 /**
71 * @brief Validates the presence of SquashFS iamge in the image dir.
72 *
Saqib Khan19177d32017-06-20 08:11:49 -050073 * @param[in] filePath - The path to the image dir.
Saqib Khan35e83f32017-05-22 11:37:32 -050074 * @param[out] result - ActivationStatus Enum.
75 * ready if validation was successful.
76 * invalid if validation fail.
77 * active if image is the current version.
78 *
79 */
Saqib Khan19177d32017-06-20 08:11:49 -050080 ActivationStatus validateSquashFSImage(const std::string& filePath);
Saqib Khan35e83f32017-05-22 11:37:32 -050081
Gunnar Millsec1b41c2017-05-02 12:20:36 -050082 /** @brief Persistent sdbusplus DBus bus connection. */
83 sdbusplus::bus::bus& bus;
84
85 /** @brief Persistent map of Activation dbus objects and their
86 * version id */
87 std::map<std::string, std::unique_ptr<Activation>> activations;
88
Saqib Khan705f1bf2017-06-09 23:58:38 -050089 /** @brief Persistent map of Version dbus objects and their
90 * version id */
91 std::map<std::string, std::unique_ptr<phosphor::software::
92 manager::Version>> versions;
93
Gunnar Millsec1b41c2017-05-02 12:20:36 -050094 /** @brief sdbusplus signal match for Software.Version */
Patrick Williamse75d10f2017-05-30 16:56:32 -050095 sdbusplus::bus::match_t versionMatch;
Gunnar Millsec1b41c2017-05-02 12:20:36 -050096
97};
98
99
100
101} // namespace updater
102} // namespace software
103} // namespace phosphor