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