pldmtool: Add support for CancelUpdateComponent
Tested:
pldmtool fw_update CancelUpdateComponent -m 13
{
"CompletionCode": "SUCCESS"
}
Change-Id: I1b2c36ad9d181ae9bd8d611b769bfbc8287c36f1
Signed-off-by: Tom Joseph <rushtotom@gmail.com>
diff --git a/pldmtool/pldm_fw_update_cmd.cpp b/pldmtool/pldm_fw_update_cmd.cpp
index d07b197..3921925 100644
--- a/pldmtool/pldm_fw_update_cmd.cpp
+++ b/pldmtool/pldm_fw_update_cmd.cpp
@@ -1215,6 +1215,46 @@
bool8_t selfContainedActivRequest;
};
+class CancelUpdateComponent : public CommandInterface
+{
+ public:
+ ~CancelUpdateComponent() = default;
+ CancelUpdateComponent() = delete;
+ CancelUpdateComponent(const CancelUpdateComponent&) = delete;
+ CancelUpdateComponent(CancelUpdateComponent&&) = delete;
+ CancelUpdateComponent& operator=(const CancelUpdateComponent&) = delete;
+ CancelUpdateComponent& operator=(CancelUpdateComponent&&) = delete;
+
+ using CommandInterface::CommandInterface;
+
+ std::pair<int, std::vector<uint8_t>> createRequestMsg() override
+ {
+ std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr));
+ auto request = new (requestMsg.data()) pldm_msg;
+ auto rc = encode_cancel_update_component_req(
+ instanceId, request, PLDM_CANCEL_UPDATE_COMPONENT_REQ_BYTES);
+ return {rc, requestMsg};
+ }
+
+ void parseResponseMsg(pldm_msg* responsePtr, size_t payloadLength) override
+ {
+ uint8_t cc = 0;
+
+ auto rc = decode_cancel_update_component_resp(responsePtr,
+ payloadLength, &cc);
+ if (rc != PLDM_SUCCESS)
+ {
+ std::cerr << "Parsing CancelUpdateComponent response failed: "
+ << "rc=" << rc << ",cc=" << static_cast<int>(cc) << "\n";
+ return;
+ }
+
+ ordered_json data;
+ fillCompletionCode(cc, data, PLDM_FWUP);
+ pldmtool::helper::DisplayInJson(data);
+ }
+};
+
void registerCommand(CLI::App& app)
{
auto fwUpdate =
@@ -1254,6 +1294,11 @@
fwUpdate->add_subcommand("ActivateFirmware", "To activate firmware");
commands.push_back(std::make_unique<ActivateFirmware>(
"fw_update", "ActivateFirmware", activateFirmware));
+
+ auto cancelUpdateComp = fwUpdate->add_subcommand(
+ "CancelUpdateComponent", "To cancel component update");
+ commands.push_back(std::make_unique<CancelUpdateComponent>(
+ "fw_update", "CancelUpdateComponent", cancelUpdateComp));
}
} // namespace fw_update