xref: /openbmc/phosphor-bmc-code-mgmt/bmc/activation.hpp (revision eae5ec9e28d8e0586eae116802e1f0c173040df7)
1cab87e9cSJagpal Singh Gill #pragma once
2cab87e9cSJagpal Singh Gill 
3cab87e9cSJagpal Singh Gill #include "config.h"
4cab87e9cSJagpal Singh Gill 
5cab87e9cSJagpal Singh Gill #include "flash.hpp"
6cab87e9cSJagpal Singh Gill #include "utils.hpp"
7cab87e9cSJagpal Singh Gill #include "xyz/openbmc_project/Software/ActivationProgress/server.hpp"
8cab87e9cSJagpal Singh Gill #include "xyz/openbmc_project/Software/RedundancyPriority/server.hpp"
9cab87e9cSJagpal Singh Gill 
10cab87e9cSJagpal Singh Gill #include <sdbusplus/server.hpp>
11cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Association/Definitions/server.hpp>
12cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Software/Activation/server.hpp>
13cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Software/ActivationBlocksTransition/server.hpp>
14cab87e9cSJagpal Singh Gill #include <xyz/openbmc_project/Software/ApplyTime/common.hpp>
15cab87e9cSJagpal Singh Gill 
16cab87e9cSJagpal Singh Gill #ifdef WANT_SIGNATURE_VERIFY
17cab87e9cSJagpal Singh Gill #include <filesystem>
18cab87e9cSJagpal Singh Gill #endif
19cab87e9cSJagpal Singh Gill 
20cab87e9cSJagpal Singh Gill namespace phosphor
21cab87e9cSJagpal Singh Gill {
22cab87e9cSJagpal Singh Gill namespace software
23cab87e9cSJagpal Singh Gill {
24cab87e9cSJagpal Singh Gill namespace updater
25cab87e9cSJagpal Singh Gill {
26cab87e9cSJagpal Singh Gill 
27cab87e9cSJagpal Singh Gill #ifdef WANT_SIGNATURE_VERIFY
28cab87e9cSJagpal Singh Gill namespace fs = std::filesystem;
29cab87e9cSJagpal Singh Gill #endif
30cab87e9cSJagpal Singh Gill 
31cab87e9cSJagpal Singh Gill using AssociationList =
32cab87e9cSJagpal Singh Gill     std::vector<std::tuple<std::string, std::string, std::string>>;
33cab87e9cSJagpal Singh Gill using ActivationInherit = sdbusplus::server::object_t<
34cab87e9cSJagpal Singh Gill     sdbusplus::server::xyz::openbmc_project::software::Activation,
35cab87e9cSJagpal Singh Gill     sdbusplus::server::xyz::openbmc_project::association::Definitions>;
36cab87e9cSJagpal Singh Gill using ActivationBlocksTransitionInherit =
37cab87e9cSJagpal Singh Gill     sdbusplus::server::object_t<sdbusplus::server::xyz::openbmc_project::
38cab87e9cSJagpal Singh Gill                                     software::ActivationBlocksTransition>;
39cab87e9cSJagpal Singh Gill using RedundancyPriorityInherit = sdbusplus::server::object_t<
40cab87e9cSJagpal Singh Gill     sdbusplus::server::xyz::openbmc_project::software::RedundancyPriority>;
41cab87e9cSJagpal Singh Gill using ActivationProgressInherit = sdbusplus::server::object_t<
42cab87e9cSJagpal Singh Gill     sdbusplus::server::xyz::openbmc_project::software::ActivationProgress>;
43cab87e9cSJagpal Singh Gill using ApplyTimeIntf =
44cab87e9cSJagpal Singh Gill     sdbusplus::common::xyz::openbmc_project::software::ApplyTime;
45cab87e9cSJagpal Singh Gill 
46cab87e9cSJagpal Singh Gill constexpr auto applyTimeImmediate =
47cab87e9cSJagpal Singh Gill     "xyz.openbmc_project.Software.ApplyTime.RequestedApplyTimes.Immediate";
48cab87e9cSJagpal Singh Gill constexpr auto applyTimeIntf = "xyz.openbmc_project.Software.ApplyTime";
49cab87e9cSJagpal Singh Gill constexpr auto dbusPropIntf = "org.freedesktop.DBus.Properties";
50cab87e9cSJagpal Singh Gill constexpr auto applyTimeObjPath = "/xyz/openbmc_project/software/apply_time";
51cab87e9cSJagpal Singh Gill constexpr auto applyTimeProp = "RequestedApplyTime";
52cab87e9cSJagpal Singh Gill 
53cab87e9cSJagpal Singh Gill namespace sdbusRule = sdbusplus::bus::match::rules;
54cab87e9cSJagpal Singh Gill 
55cab87e9cSJagpal Singh Gill class ItemUpdater;
56cab87e9cSJagpal Singh Gill class Activation;
57cab87e9cSJagpal Singh Gill class RedundancyPriority;
58cab87e9cSJagpal Singh Gill 
59cab87e9cSJagpal Singh Gill /** @class RedundancyPriority
60cab87e9cSJagpal Singh Gill  *  @brief OpenBMC RedundancyPriority implementation
61cab87e9cSJagpal Singh Gill  *  @details A concrete implementation for
62cab87e9cSJagpal Singh Gill  *  xyz.openbmc_project.Software.RedundancyPriority DBus API.
63cab87e9cSJagpal Singh Gill  */
64cab87e9cSJagpal Singh Gill class RedundancyPriority : public RedundancyPriorityInherit
65cab87e9cSJagpal Singh Gill {
66cab87e9cSJagpal Singh Gill   public:
67cab87e9cSJagpal Singh Gill     /** @brief Constructs RedundancyPriority.
68cab87e9cSJagpal Singh Gill      *
69cab87e9cSJagpal Singh Gill      *  @param[in] bus    - The Dbus bus object
70cab87e9cSJagpal Singh Gill      *  @param[in] path   - The Dbus object path
71cab87e9cSJagpal Singh Gill      *  @param[in] parent - Parent object.
72cab87e9cSJagpal Singh Gill      *  @param[in] value  - The redundancyPriority value
73cab87e9cSJagpal Singh Gill      *  @param[in] freePriority  - Call freePriorioty, default to true
74cab87e9cSJagpal Singh Gill      */
RedundancyPriority(sdbusplus::bus_t & bus,const std::string & path,Activation & parent,uint8_t value,bool freePriority=true)75cab87e9cSJagpal Singh Gill     RedundancyPriority(sdbusplus::bus_t& bus, const std::string& path,
76cab87e9cSJagpal Singh Gill                        Activation& parent, uint8_t value,
77cab87e9cSJagpal Singh Gill                        bool freePriority = true) :
78cab87e9cSJagpal Singh Gill         RedundancyPriorityInherit(bus, path.c_str(),
79cab87e9cSJagpal Singh Gill                                   action::emit_interface_added),
80cab87e9cSJagpal Singh Gill         parent(parent)
81cab87e9cSJagpal Singh Gill     {
82cab87e9cSJagpal Singh Gill         // Set Property
83cab87e9cSJagpal Singh Gill         if (freePriority)
84cab87e9cSJagpal Singh Gill         {
85cab87e9cSJagpal Singh Gill             priority(value);
86cab87e9cSJagpal Singh Gill         }
87cab87e9cSJagpal Singh Gill         else
88cab87e9cSJagpal Singh Gill         {
89cab87e9cSJagpal Singh Gill             sdbusPriority(value);
90cab87e9cSJagpal Singh Gill         }
91cab87e9cSJagpal Singh Gill     }
92cab87e9cSJagpal Singh Gill 
93cab87e9cSJagpal Singh Gill     /** @brief Overridden Priority property set function, calls freePriority
94cab87e9cSJagpal Singh Gill      *         to bump the duplicated priority values.
95cab87e9cSJagpal Singh Gill      *
96cab87e9cSJagpal Singh Gill      *  @param[in] value - uint8_t
97cab87e9cSJagpal Singh Gill      *
98cab87e9cSJagpal Singh Gill      *  @return Success or exception thrown
99cab87e9cSJagpal Singh Gill      */
100cab87e9cSJagpal Singh Gill     uint8_t priority(uint8_t value) override;
101cab87e9cSJagpal Singh Gill 
102cab87e9cSJagpal Singh Gill     /** @brief Non-Overriden Priority property set function
103cab87e9cSJagpal Singh Gill      *
104cab87e9cSJagpal Singh Gill      *  @param[in] value - uint8_t
105cab87e9cSJagpal Singh Gill      *
106cab87e9cSJagpal Singh Gill      *  @return Success or exception thrown
107cab87e9cSJagpal Singh Gill      */
108cab87e9cSJagpal Singh Gill     uint8_t sdbusPriority(uint8_t value);
109cab87e9cSJagpal Singh Gill 
110cab87e9cSJagpal Singh Gill     /** @brief Priority property get function
111cab87e9cSJagpal Singh Gill      *
112cab87e9cSJagpal Singh Gill      *  @returns uint8_t - The Priority value
113cab87e9cSJagpal Singh Gill      */
114cab87e9cSJagpal Singh Gill     using RedundancyPriorityInherit::priority;
115cab87e9cSJagpal Singh Gill 
116cab87e9cSJagpal Singh Gill     /** @brief Parent Object. */
117cab87e9cSJagpal Singh Gill     Activation& parent;
118cab87e9cSJagpal Singh Gill };
119cab87e9cSJagpal Singh Gill 
120cab87e9cSJagpal Singh Gill /** @class ActivationBlocksTransition
121cab87e9cSJagpal Singh Gill  *  @brief OpenBMC ActivationBlocksTransition implementation.
122cab87e9cSJagpal Singh Gill  *  @details A concrete implementation for
123cab87e9cSJagpal Singh Gill  *  xyz.openbmc_project.Software.ActivationBlocksTransition DBus API.
124cab87e9cSJagpal Singh Gill  */
125cab87e9cSJagpal Singh Gill class ActivationBlocksTransition : public ActivationBlocksTransitionInherit
126cab87e9cSJagpal Singh Gill {
127cab87e9cSJagpal Singh Gill   public:
128cab87e9cSJagpal Singh Gill     /** @brief Constructs ActivationBlocksTransition.
129cab87e9cSJagpal Singh Gill      *
130cab87e9cSJagpal Singh Gill      *  @param[in] bus    - The Dbus bus object
131cab87e9cSJagpal Singh Gill      *  @param[in] path   - The Dbus object path
132cab87e9cSJagpal Singh Gill      */
ActivationBlocksTransition(sdbusplus::bus_t & bus,const std::string & path)133cab87e9cSJagpal Singh Gill     ActivationBlocksTransition(sdbusplus::bus_t& bus, const std::string& path) :
134cab87e9cSJagpal Singh Gill         ActivationBlocksTransitionInherit(bus, path.c_str(),
135cab87e9cSJagpal Singh Gill                                           action::emit_interface_added),
136cab87e9cSJagpal Singh Gill         bus(bus)
137cab87e9cSJagpal Singh Gill     {
138cab87e9cSJagpal Singh Gill         enableRebootGuard();
139cab87e9cSJagpal Singh Gill     }
140cab87e9cSJagpal Singh Gill 
~ActivationBlocksTransition()141cab87e9cSJagpal Singh Gill     ~ActivationBlocksTransition() override
142cab87e9cSJagpal Singh Gill     {
143cab87e9cSJagpal Singh Gill         disableRebootGuard();
144cab87e9cSJagpal Singh Gill     }
145cab87e9cSJagpal Singh Gill 
146cab87e9cSJagpal Singh Gill     ActivationBlocksTransition(const ActivationBlocksTransition&) = delete;
147*eae5ec9eSPatrick Williams     ActivationBlocksTransition& operator=(const ActivationBlocksTransition&) =
148*eae5ec9eSPatrick Williams         delete;
149cab87e9cSJagpal Singh Gill     ActivationBlocksTransition(ActivationBlocksTransition&&) = delete;
150*eae5ec9eSPatrick Williams     ActivationBlocksTransition& operator=(ActivationBlocksTransition&&) =
151*eae5ec9eSPatrick Williams         delete;
152cab87e9cSJagpal Singh Gill 
153cab87e9cSJagpal Singh Gill   private:
154cab87e9cSJagpal Singh Gill     sdbusplus::bus_t& bus;
155cab87e9cSJagpal Singh Gill 
156cab87e9cSJagpal Singh Gill     /** @brief Enables a Guard that blocks any BMC reboot commands */
157cab87e9cSJagpal Singh Gill     void enableRebootGuard();
158cab87e9cSJagpal Singh Gill 
159cab87e9cSJagpal Singh Gill     /** @brief Disables any guard that was blocking the BMC reboot */
160cab87e9cSJagpal Singh Gill     void disableRebootGuard();
161cab87e9cSJagpal Singh Gill };
162cab87e9cSJagpal Singh Gill 
163cab87e9cSJagpal Singh Gill class ActivationProgress : public ActivationProgressInherit
164cab87e9cSJagpal Singh Gill {
165cab87e9cSJagpal Singh Gill   public:
166cab87e9cSJagpal Singh Gill     /** @brief Constructs ActivationProgress.
167cab87e9cSJagpal Singh Gill      *
168cab87e9cSJagpal Singh Gill      * @param[in] bus    - The Dbus bus object
169cab87e9cSJagpal Singh Gill      * @param[in] path   - The Dbus object path
170cab87e9cSJagpal Singh Gill      */
ActivationProgress(sdbusplus::bus_t & bus,const std::string & path)171cab87e9cSJagpal Singh Gill     ActivationProgress(sdbusplus::bus_t& bus, const std::string& path) :
172cab87e9cSJagpal Singh Gill         ActivationProgressInherit(bus, path.c_str(),
173cab87e9cSJagpal Singh Gill                                   action::emit_interface_added)
174cab87e9cSJagpal Singh Gill     {
175cab87e9cSJagpal Singh Gill         progress(0);
176cab87e9cSJagpal Singh Gill     }
177cab87e9cSJagpal Singh Gill };
178cab87e9cSJagpal Singh Gill 
179cab87e9cSJagpal Singh Gill /** @class Activation
180cab87e9cSJagpal Singh Gill  *  @brief OpenBMC activation software management implementation.
181cab87e9cSJagpal Singh Gill  *  @details A concrete implementation for
182cab87e9cSJagpal Singh Gill  *  xyz.openbmc_project.Software.Activation DBus API.
183cab87e9cSJagpal Singh Gill  */
184cab87e9cSJagpal Singh Gill class Activation : public ActivationInherit, public Flash
185cab87e9cSJagpal Singh Gill {
186cab87e9cSJagpal Singh Gill   public:
187cab87e9cSJagpal Singh Gill     /** @brief Constructs Activation Software Manager
188cab87e9cSJagpal Singh Gill      *
189cab87e9cSJagpal Singh Gill      * @param[in] bus    - The Dbus bus object
190cab87e9cSJagpal Singh Gill      * @param[in] path   - The Dbus object path
191cab87e9cSJagpal Singh Gill      * @param[in] parent - Parent object.
192cab87e9cSJagpal Singh Gill      * @param[in] versionId  - The software version id
193cab87e9cSJagpal Singh Gill      * @param[in] activationStatus - The status of Activation
194cab87e9cSJagpal Singh Gill      * @param[in] assocs - Association objects
195cab87e9cSJagpal Singh Gill      */
Activation(sdbusplus::bus_t & bus,const std::string & path,ItemUpdater & parent,std::string & versionId,sdbusplus::server::xyz::openbmc_project::software::Activation::Activations activationStatus,AssociationList & assocs)196cab87e9cSJagpal Singh Gill     Activation(sdbusplus::bus_t& bus, const std::string& path,
197cab87e9cSJagpal Singh Gill                ItemUpdater& parent, std::string& versionId,
198cab87e9cSJagpal Singh Gill                sdbusplus::server::xyz::openbmc_project::software::Activation::
199cab87e9cSJagpal Singh Gill                    Activations activationStatus,
200cab87e9cSJagpal Singh Gill                AssociationList& assocs) :
201cab87e9cSJagpal Singh Gill         ActivationInherit(bus, path.c_str(),
202cab87e9cSJagpal Singh Gill                           ActivationInherit::action::defer_emit),
203cab87e9cSJagpal Singh Gill         bus(bus), path(path), parent(parent), versionId(versionId),
204cab87e9cSJagpal Singh Gill         systemdSignals(
205cab87e9cSJagpal Singh Gill             bus,
206cab87e9cSJagpal Singh Gill             sdbusRule::type::signal() + sdbusRule::member("JobRemoved") +
207cab87e9cSJagpal Singh Gill                 sdbusRule::path("/org/freedesktop/systemd1") +
208cab87e9cSJagpal Singh Gill                 sdbusRule::interface("org.freedesktop.systemd1.Manager"),
209cab87e9cSJagpal Singh Gill             std::bind(std::mem_fn(&Activation::unitStateChange), this,
210cab87e9cSJagpal Singh Gill                       std::placeholders::_1))
211cab87e9cSJagpal Singh Gill     {
212cab87e9cSJagpal Singh Gill         // Set Properties.
213cab87e9cSJagpal Singh Gill         activation(activationStatus);
214cab87e9cSJagpal Singh Gill         associations(assocs);
215cab87e9cSJagpal Singh Gill 
216cab87e9cSJagpal Singh Gill         // Emit deferred signal.
217cab87e9cSJagpal Singh Gill         emit_object_added();
218cab87e9cSJagpal Singh Gill     }
219cab87e9cSJagpal Singh Gill 
220cab87e9cSJagpal Singh Gill     /** @brief Overloaded Activation property setter function
221cab87e9cSJagpal Singh Gill      *
222cab87e9cSJagpal Singh Gill      * @param[in] value - One of Activation::Activations
223cab87e9cSJagpal Singh Gill      *
224cab87e9cSJagpal Singh Gill      * @return Success or exception thrown
225cab87e9cSJagpal Singh Gill      */
226cab87e9cSJagpal Singh Gill     Activations activation(Activations value) override;
227cab87e9cSJagpal Singh Gill 
228cab87e9cSJagpal Singh Gill     /** @brief Activation */
229cab87e9cSJagpal Singh Gill     using ActivationInherit::activation;
230cab87e9cSJagpal Singh Gill 
231cab87e9cSJagpal Singh Gill     /** @brief Overloaded requestedActivation property setter function
232cab87e9cSJagpal Singh Gill      *
233cab87e9cSJagpal Singh Gill      * @param[in] value - One of Activation::RequestedActivations
234cab87e9cSJagpal Singh Gill      *
235cab87e9cSJagpal Singh Gill      * @return Success or exception thrown
236cab87e9cSJagpal Singh Gill      */
237*eae5ec9eSPatrick Williams     RequestedActivations requestedActivation(
238*eae5ec9eSPatrick Williams         RequestedActivations value) override;
239cab87e9cSJagpal Singh Gill 
240cab87e9cSJagpal Singh Gill     /** @brief Overloaded write flash function */
241cab87e9cSJagpal Singh Gill     void flashWrite() override;
242cab87e9cSJagpal Singh Gill 
243cab87e9cSJagpal Singh Gill     /**
244cab87e9cSJagpal Singh Gill      * @brief Handle the success of the flashWrite() function
245cab87e9cSJagpal Singh Gill      *
246cab87e9cSJagpal Singh Gill      * @details Perform anything that is necessary to mark the activation
247cab87e9cSJagpal Singh Gill      * successful after the image has been written to flash. Sets the Activation
248cab87e9cSJagpal Singh Gill      * value to Active.
249cab87e9cSJagpal Singh Gill      */
250cab87e9cSJagpal Singh Gill     void onFlashWriteSuccess();
251cab87e9cSJagpal Singh Gill 
252cab87e9cSJagpal Singh Gill #ifdef HOST_BIOS_UPGRADE
253cab87e9cSJagpal Singh Gill     /* @brief write to Host flash function */
254cab87e9cSJagpal Singh Gill     void flashWriteHost();
255cab87e9cSJagpal Singh Gill 
256cab87e9cSJagpal Singh Gill     /** @brief Function that acts on Bios upgrade service file state changes */
257cab87e9cSJagpal Singh Gill     void onStateChangesBios(sdbusplus::message_t& /*msg*/);
258cab87e9cSJagpal Singh Gill #endif
259cab87e9cSJagpal Singh Gill 
260cab87e9cSJagpal Singh Gill     /** @brief Overloaded function that acts on service file state changes */
261cab87e9cSJagpal Singh Gill     void onStateChanges(sdbusplus::message_t& /*msg*/) override;
262cab87e9cSJagpal Singh Gill 
263cab87e9cSJagpal Singh Gill     /** @brief Check if systemd state change is relevant to this object
264cab87e9cSJagpal Singh Gill      *
265cab87e9cSJagpal Singh Gill      * Instance specific interface to handle the detected systemd state
266cab87e9cSJagpal Singh Gill      * change
267cab87e9cSJagpal Singh Gill      *
268cab87e9cSJagpal Singh Gill      * @param[in]  msg       - Data associated with subscribed signal
269cab87e9cSJagpal Singh Gill      *
270cab87e9cSJagpal Singh Gill      */
271cab87e9cSJagpal Singh Gill     void unitStateChange(sdbusplus::message_t& msg);
272cab87e9cSJagpal Singh Gill 
273cab87e9cSJagpal Singh Gill     /**
274cab87e9cSJagpal Singh Gill      * @brief subscribe to the systemd signals
275cab87e9cSJagpal Singh Gill      *
276cab87e9cSJagpal Singh Gill      * This object needs to capture when it's systemd targets complete
277cab87e9cSJagpal Singh Gill      * so it can keep it's state updated
278cab87e9cSJagpal Singh Gill      *
279cab87e9cSJagpal Singh Gill      */
280cab87e9cSJagpal Singh Gill     void subscribeToSystemdSignals();
281cab87e9cSJagpal Singh Gill 
282cab87e9cSJagpal Singh Gill     /**
283cab87e9cSJagpal Singh Gill      * @brief unsubscribe from the systemd signals
284cab87e9cSJagpal Singh Gill      *
285cab87e9cSJagpal Singh Gill      * systemd signals are only of interest during the activation process.
286cab87e9cSJagpal Singh Gill      * Once complete, we want to unsubscribe to avoid unnecessary calls of
287cab87e9cSJagpal Singh Gill      * unitStateChange().
288cab87e9cSJagpal Singh Gill      *
289cab87e9cSJagpal Singh Gill      */
290cab87e9cSJagpal Singh Gill     void unsubscribeFromSystemdSignals();
291cab87e9cSJagpal Singh Gill 
292cab87e9cSJagpal Singh Gill     /**
293cab87e9cSJagpal Singh Gill      * @brief Deletes the version from Image Manager and the
294cab87e9cSJagpal Singh Gill      *        untar image from image upload dir.
295cab87e9cSJagpal Singh Gill      */
296cab87e9cSJagpal Singh Gill     void deleteImageManagerObject();
297cab87e9cSJagpal Singh Gill 
298cab87e9cSJagpal Singh Gill     /**
299cab87e9cSJagpal Singh Gill      * @brief Determine the configured image apply time value
300cab87e9cSJagpal Singh Gill      *
301cab87e9cSJagpal Singh Gill      * @return true if the image apply time value is immediate
302cab87e9cSJagpal Singh Gill      **/
303cab87e9cSJagpal Singh Gill     bool checkApplyTimeImmediate();
304cab87e9cSJagpal Singh Gill 
305cab87e9cSJagpal Singh Gill     /**
306cab87e9cSJagpal Singh Gill      * @brief Reboot the BMC. Called when ApplyTime is immediate.
307cab87e9cSJagpal Singh Gill      *
308cab87e9cSJagpal Singh Gill      * @return none
309cab87e9cSJagpal Singh Gill      **/
310cab87e9cSJagpal Singh Gill     void rebootBmc();
311cab87e9cSJagpal Singh Gill 
312cab87e9cSJagpal Singh Gill     /** @brief Persistent sdbusplus DBus bus connection */
313cab87e9cSJagpal Singh Gill     sdbusplus::bus_t& bus;
314cab87e9cSJagpal Singh Gill 
315cab87e9cSJagpal Singh Gill     /** @brief Persistent DBus object path */
316cab87e9cSJagpal Singh Gill     std::string path;
317cab87e9cSJagpal Singh Gill 
318cab87e9cSJagpal Singh Gill     /** @brief Parent Object. */
319cab87e9cSJagpal Singh Gill     ItemUpdater& parent;
320cab87e9cSJagpal Singh Gill 
321cab87e9cSJagpal Singh Gill     /** @brief Version id */
322cab87e9cSJagpal Singh Gill     std::string versionId;
323cab87e9cSJagpal Singh Gill 
324cab87e9cSJagpal Singh Gill     /** @brief Persistent ActivationBlocksTransition dbus object */
325cab87e9cSJagpal Singh Gill     std::unique_ptr<ActivationBlocksTransition> activationBlocksTransition;
326cab87e9cSJagpal Singh Gill 
327cab87e9cSJagpal Singh Gill     /** @brief Persistent RedundancyPriority dbus object */
328cab87e9cSJagpal Singh Gill     std::unique_ptr<RedundancyPriority> redundancyPriority;
329cab87e9cSJagpal Singh Gill 
330cab87e9cSJagpal Singh Gill     /** @brief Persistent ActivationProgress dbus object */
331cab87e9cSJagpal Singh Gill     std::unique_ptr<ActivationProgress> activationProgress;
332cab87e9cSJagpal Singh Gill 
333cab87e9cSJagpal Singh Gill     /** @brief Apply time */
334cab87e9cSJagpal Singh Gill     ApplyTimeIntf::RequestedApplyTimes applyTime;
335cab87e9cSJagpal Singh Gill 
336cab87e9cSJagpal Singh Gill     /** @brief Used to subscribe to dbus systemd signals **/
337cab87e9cSJagpal Singh Gill     sdbusplus::bus::match_t systemdSignals;
338cab87e9cSJagpal Singh Gill 
339cab87e9cSJagpal Singh Gill     /** @brief Tracks whether the read-write volume has been created as
340cab87e9cSJagpal Singh Gill      * part of the activation process. **/
341cab87e9cSJagpal Singh Gill     bool rwVolumeCreated = false;
342cab87e9cSJagpal Singh Gill 
343cab87e9cSJagpal Singh Gill     /** @brief Tracks whether the read-only volume has been created as
344cab87e9cSJagpal Singh Gill      * part of the activation process. **/
345cab87e9cSJagpal Singh Gill     bool roVolumeCreated = false;
346cab87e9cSJagpal Singh Gill 
347cab87e9cSJagpal Singh Gill     /** @brief Tracks if the service that updates the U-Boot environment
348cab87e9cSJagpal Singh Gill      *         variables has completed. **/
349cab87e9cSJagpal Singh Gill     bool ubootEnvVarsUpdated = false;
350cab87e9cSJagpal Singh Gill 
351cab87e9cSJagpal Singh Gill #ifdef WANT_SIGNATURE_VERIFY
352cab87e9cSJagpal Singh Gill   private:
353cab87e9cSJagpal Singh Gill     /** @brief Verify signature of the images.
354cab87e9cSJagpal Singh Gill      *
355cab87e9cSJagpal Singh Gill      * @param[in] imageDir - The path of images to verify
356cab87e9cSJagpal Singh Gill      * @param[in] confDir - The path of configs for verification
357cab87e9cSJagpal Singh Gill      *
358cab87e9cSJagpal Singh Gill      * @return true if verification successful and false otherwise
359cab87e9cSJagpal Singh Gill      */
360cab87e9cSJagpal Singh Gill     static bool verifySignature(const fs::path& imageDir,
361cab87e9cSJagpal Singh Gill                                 const fs::path& confDir);
362cab87e9cSJagpal Singh Gill 
363cab87e9cSJagpal Singh Gill     /** @brief Called when image verification fails. */
364cab87e9cSJagpal Singh Gill     void onVerifyFailed();
365cab87e9cSJagpal Singh Gill #endif
366cab87e9cSJagpal Singh Gill };
367cab87e9cSJagpal Singh Gill 
368cab87e9cSJagpal Singh Gill } // namespace updater
369cab87e9cSJagpal Singh Gill } // namespace software
370cab87e9cSJagpal Singh Gill } // namespace phosphor
371