Redfish Firmware Update White Paper
Redfish Firmware Update White Paper
Date: 2021-05-25
Version: 1.0.0
Supersedes: None
Copyright Notice
DMTF is a not-for-profit association of industry members dedicated to promoting enterprise and systems
management and interoperability. Members and non-members may reproduce DMTF specifications and
documents, provided that correct attribution is given. As DMTF specifications may be revised from time to
time, the particular version and release date should always be noted.
Implementation of certain elements of this standard or proposed standard may be subject to third party
patent rights, including provisional patent rights (herein "patent rights"). DMTF makes no representations
to users of the standard as to the existence of such rights, and is not responsible to recognize, disclose,
or identify any or all such third party patent right, owners or claimants, nor for any incomplete or
inaccurate identification or disclosure of such rights, owners or claimants. DMTF shall have no liability to
any party, in any manner or circumstance, under any legal theory whatsoever, for failure to recognize,
disclose, or identify any such third party patent rights, or for such party's reliance on the standard or
incorporation thereof in its product, protocols or testing procedures. DMTF shall have no liability to any
party implementing such standard, whether such implementation is foreseeable or not, nor to any patent
owner or claimant, and shall have no liability or responsibility for costs or losses incurred if a standard is
withdrawn or modified after publication, and shall be indemnified and held harmless by any party
implementing the standard from any and all claims of infringement by a patent owner for such
implementations.
For information about patents held by third-parties which have notified the DMTF that, in their opinion,
such patent may relate to or impact implementations of DMTF standards, visit http://www.dmtf.org/about/
policies/disclosures.php.
This document's normative language is English. Translation into other languages is permitted.
CONTENTS
1 Foreword {-} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1 Acknowledgments {-} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Methods for firmware update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1 Transferring the image via push and pull. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Installing the image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 Transferring the image to the system. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5 Data model and operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.1 Update service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.1.1 Simple update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.1.2 Multipart HTTP push update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.1.3 Unstructured HTTP push update (deprecated) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2 Software inventory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6 Firmware update workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.1 Initiate an update operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.2 Task monitoring of the update operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.3 Update operation response management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6.4 Job monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7 Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.1 "Transfer the firmware image to the manager" messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.2 "Verification of the firmware image on the manager" messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.3 "Transfer of the firmware image to the device" messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7.4 "Verification of the firmware image on the device" messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7.5 "Installation of the firmware image on the device" messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
7.6 "Activation of the firmware image on the device" messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8 Appendix A: References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
9 Appendix B: Change log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1 Foreword {-}
The Redfish Firmware Update White Paper was prepared by the Redfish Forum of the DMTF.
DMTF is a not-for-profit association of industry members dedicated to promoting enterprise and systems
management and interoperability. For information about the DMTF, see http://www.dmtf.org.
The DMTF acknowledges the following individuals for their contributions to this document:
2 Introduction
Firmware is the executable binary that a processor or micro-controller executes. A compute system may contain
multiple firmware images. Hence, the capability to update these firmware images is important.
Redfish is an hardware management interface standard that is designed to be flexible, extensible, and interoperable.
Redfish is comFposed of an interface specification and resource models. The resource models supported determine
the capabilities of the management interface. This document describes the that is used to update the firmware
images on a system.
This document helps implementers and clients understand the Redfish firmware update data model and how its used
to update firmware images on a system.
The transfer of the firmware image to the platform can be performed by pushing the firmware image to the system or
the system can pull the firmware image from an external location.
In a push firmware request, the firmware image or images are transferred in the POST request. Redfish specifies a
HTTP multi-part format for this type of request.
In a pull firmware request, the location of the firmware image is provided in the POST request. The Redfish Service
transfers the firmware image from the specified location, before preceding with the firmware update.
• By the BMC
• By the device which executes firmware image, itself
• By software running standalone or within an operating system.
Figure 1 shows the flows of a firmware update. Understanding these flows are necessary to understand the failure
and intervention modes, and the messages that are available.
On the left side of the diagram are the three installation entities described above.
Figure 1
The installation via software may require that the system be booted in order to load the standalone software or the
operating system. This is shown as an user intervention state on the lower flow.
Another user intervention state may exist between the firmware installed and firmware activated states. This is shown
on the right side of the flow diagram. In this flow, user intervention such as a reset is required between the install and
activation of the firmware image.
Now, looking the flow diagram from left of right, the general firmware update flow can be divided in several stages.
In the pull mechanism, the firmware update request contains information on the location of the firmware image,
external to the system. The Redfish Service uses the location information to transfers the image to the Redfish
Service.
In the push mechanism, the firmware update request contains the firmware image or images. The push mechanism
uses the HTTP multi-part structure. The multi-part
The UpdateService resource is the top level resource visible on the service root. It contains status and control
indicator properties such as Status and ServiceEnabled . These are common properties found on various Redfish
service instances.
The FirmwareInventory and SoftwareInventory properties contain a link to the collection of SoftwareInventory
resources. The collection referenced by FirmwareInventory contains software components generally referred to as
platform firmware and does not execute within a host operating system. The collection referenced by
SoftwareInventory contains software components executed in the context of a host operating system, such as
device drivers, applications, or offload workloads. The SoftwareInventory resource is described in the Software
inventory section.
The SimpleUpdate action found within Actions contains information for how to perform an update request using a
"pull" method. This is described further in the Simple update section.
The MultipartHttpPushUri property is used for performing a multipart HTTP POST operation for invoking an update
operation. This is described further in the Multipart HTTP push update section.
{
"@odata.id": "/redfish/v1/UpdateService",
"@odata.type": "#UpdateService.v1_8_0.UpdateService",
"Id": "UpdateService",
"Name": "Update service",
"Status": {
"State": "Enabled",
"Health": "OK",
"HealthRollup": "OK"
},
"ServiceEnabled": true,
"MultipartHttpPushUri": "/redfish/v1/UpdateService/update-multipart",
"Actions": {
"#UpdateService.SimpleUpdate": {
"target": "/redfish/v1/UpdateService/Actions/SimpleUpdate",
"@Redfish.ActionInfo": "/redfish/v1/UpdateService/SimpleUpdateActionInfo"
}
},
"FirmwareInventory": {
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory"
},
"SoftwareInventory": {
"@odata.id": "/redfish/v1/UpdateService/SoftwareInventory"
},
"HttpPushUri": "/redfish/v1/UpdateService/update",
"HttpPushUriTargets": [],
"HttpPushUriTargetsBusy": false,
"HttpPushUriOptions": {
"HttpPushUriApplyTime": {
"ApplyTime": "Immediate",
"[email protected]": [
"Immediate",
"OnReset",
"AtMaintenanceWindowStart",
"InMaintenanceWindowOnReset"
],
"MaintenanceWindowStartTime": "2018-12-01T03:00:00+06:00",
"MaintenanceWindowDurationInSeconds": 600
}
},
"HttpPushUriOptionsBusy": false
}
The SimpleUpdate action within the UpdateService resource is used to request the service to download an image
from a remote server and perform an update using the image. This is also known as a "pull" update. If the action is
not present, the service does not support simple updates. A client can invoke this type of update by performing an
HTTP POST to the URI specified by the target property.
{
"Actions": {
"#UpdateService.SimpleUpdate": {
"target": "/redfish/v1/UpdateService/Actions/SimpleUpdate",
"@Redfish.ActionInfo": "/redfish/v1/UpdateService/SimpleUpdateActionInfo"
}
},
...
}
The contents of HTTP body in the POST operation contains parameters supplied by the client. The following
parameters can be provided by the client.
The network protocol that the update service uses to retrieve the image file located at the URI provided in the
ImageURI parameter.
TransferProtocol String
Note: This parameter is only used when the scheme is not encoded in the ImageURI parameter. If the scheme is
present, this parameter is ignored.
Targets Array An array of strings that are URIs to resources that indicate where to apply the image.
Username String The user name to access the URI specified by the ImageURI parameter.
Password String The password to access the URI specified by the ImageURI parameter.
It is recommended that services support the @Redfish.ActionInfo annotation so that clients can discover the
supported parameters for the operation.
Example ActionInfo resource where ImageURI is required, and all other parameters are optional:
{
"@odata.id": "/redfish/v1/UpdateService/SimpleUpdateActionInfo",
"@odata.type": "#ActionInfo.v1_1_0.ActionInfo",
"Id": "SimpleUpdateActionInfo",
"Name": "Simple Update Action Info",
"Parameters": [
{
"Name": "ImageURI",
"Required": true,
"DataType": "String"
},
{
"Name": "TransferProtocol",
"Required": false,
"DataType": "String",
"AllowableValues": [
"HTTP",
"HTTPS",
"FTP"
]
},
{
"Name": "Targets",
"Required": false,
"DataType": "StringArray"
},
{
"Name": "Username",
"Required": false,
"DataType": "String"
},
{
"Name": "Password",
"Required": false,
"DataType": "String"
}
]
}
{
"ImageURI": "https://192.168.1.250/images/bmc_update.bin"
}
The MultipartHttpPushUri property within the UpdateService resource contains the URI for performing a multipart
HTTP push update. If the property is not present, the service does not support multipart HTTP push updates. Clients
can perform an RFC7578-defined HTTP POST operation on this URI to perform an update. The body of the request
contains multipart forms with parameters for the update and the image for updating. The following multipart forms
are defined for this operation.
Content-
Form Required Content-Disposition Description
Type
JSON-formatted part for passing the update parameters. The format of the
Update form-data; application/
Yes JSON follows the definition of the UpdateParameters object in the
parameters name="UpdateParameters" json
UpdateService schema.
form-data;
Update application/ Binary file to use for the update. The value of the filename field reflects
Yes name="UpdateFile";
image octet-stream the name of the file as loaded by the client.
filename=string
form-data; OEM-defined form. The value of the name field will contain Oem
OEM No OEM-defined
name="OemXXXX" concatenated with the company identifier.
The "Update parameters" form can contain the following properties. None of the parameters are required, so an
empty JSON object is used for cases where the client does not need to specify anything.
Targets Array An array of strings that are URIs to resources that indicate where to apply the image.
-----------------------------d74496d66958873e
Content-Disposition: form-data; name="UpdateParameters"
Content-Type: application/json
{}
-----------------------------d74496d66958873e
Content-Disposition: form-data; name="UpdateFile"; filename="bmc_update.bin"
Content-Type: application/octet-stream
Note: Due to the vendor-specific details of this operation, this method has been deprecated in favor of
multipart HTTP push updates.
The HttpPushUri property within the UpdateService resource contains the URI for performing an unstructured HTTP
push update. If the property is not present, the service does not support unstructured HTTP push updates. Clients can
perform an HTTP POST operation on this URI to perform an update. The contents of the HTTP POST operation are
vendor-defined.
The following properties in the update service are used to control the behavior of the unstructured HTTP push
update.
An array of strings that are URIs to resources that indicate where to apply the image when a client
HttpPushUriTargets Array
performs an HTTP POST on the URI specified by HttpPushUri .
An indication of whether any client has reserved the HttpPushUriTargets property. Clients are expected
to set this property to true prior to configuring an unstructured HTTP push update, and false after
the unstructured HTTP push update has been performed.
HttpPushUriTargetsBusy Boolean
Note: Services do not enforce this reservation. Clients are expected to honor the reservation made by
other clients.
Contains additional configuration parameters for the update, such as options for controlling the apply
HttpPushUriOptions Object
time of the update.
An indication of whether any client has reserved the HttpPushUriOptions property. Clients are expected
to set this property to true prior to configuring an unstructured HTTP push update, and false after
the unstructured HTTP push update has been performed.
HttpPushUriOptionsBusy Boolean
Note: Services do not enforce this reservation. Clients are expected to honor the reservation made by
other clients.
{
"HttpPushUri": "/redfish/v1/UpdateService/update",
"HttpPushUriTargets": [],
"HttpPushUriTargetsBusy": false,
"HttpPushUriOptions": {
"HttpPushUriApplyTime": {
"ApplyTime": "Immediate",
"[email protected]": [
"Immediate",
"OnReset",
"AtMaintenanceWindowStart",
"InMaintenanceWindowOnReset"
],
"MaintenanceWindowStartTime": "2018-12-01T03:00:00+06:00",
"MaintenanceWindowDurationInSeconds": 600
}
},
"HttpPushUriOptionsBusy": false,
...
}
The SoftwareInventory resource contains a representation of either a firmware image or software image that has
been activated on the system. The following properties can be found in the resource.
Updateable Boolean Indicates whether the image can be updated by the update service.
The name of the manufacturer or producer of the image. This property follows the Redfish-defined
Manufacturer String
date-time format.
The lowest supported version of the image. Manufacturers recommend clients do not downgrade below
LowestSupportedVersion String
the lowest supported version.
UefiDevicePaths Array An array of UEFI device paths for the components associated with the image.
{
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BMC",
"@odata.type": "#SoftwareInventory.v1_2_3.SoftwareInventory",
"Id": "BMC",
"Name": "Contoso BMC Firmware",
"Status": {
"State": "Enabled",
"Health": "OK"
},
"Updateable": true,
"Manufacturer": "Contoso",
"ReleaseDate": "2017-08-22T12:00:00",
"Version": "1.45.455b66-rev4",
"SoftwareId": "1624A9DF-5E13-47FC-874A-DF3AFF143089",
"LowestSupportedVersion": "1.30.367a12-rev1",
"UefiDevicePaths": [
"BMC(0x1,0x0ABCDEF)"
],
"RelatedItem": [
{
"@odata.id": "/redfish/v1/Managers/BMC"
}
]
}
• If images are kept on a remote server and not stored locally by the client, the SimpleUpdate action is the
recommended method. This is described further in the Simple update section.
• If images are local to the client, a POST operation to the URI specified by the MultipartHttpPushUri property is
the recommended method. This is described further in the Multipart HTTP push update section.
There might be cases where a service only supports one method. Clients might need to support fallback logic, such as
creating a temporary web server to host a local image if multipart HTTP push updates are not supported.
If performing a simple update, additional information might need to be provided in order for the service to retrieve
the image, such as a user name or password. This information is provided as parameters to the SimpleUpdate action.
If service supports the @Redfish.OperationApplyTime parameter, a client can specify when the service begins the
update operation. This parameter is provided in the body of the SimpleUpdate action, or in the "Update parameters"
of the multipart HTTP request. The following values can be used for the @Redfish.OperationApplyTime parameter.
Value Description
OnReset The update operation starts on the next system or service reset.
The update operation starts at the start of the maintenance window. The MaintenanceWindow property
AtMaintenanceWindowStart
contains the start time and duration of the maintenance window.
The update operation starts on the next system or service reset when inside of the maintenance window. The
InMaintenanceWindowOnReset
MaintenanceWindow property contains the start time and duration of the maintenance window.
OnStartUpdateRequest The update operation starts when the StartUpdate action is performed by a client.
If the response from the update operation contains a HTTP 202 Accepted status code, the client will need to
transition to monitoring the task. For all other cases, the client will need to parse the result of the update operation.
The response from the update operation should contain a HTTP 202 Accepted status code, which indicates a task has
been produced for the operation. The Location header in the response contains the URI of the task monitor. Clients
perform monitoring of this URI as described in the "Asynchronous operations" clause in the Redfish Specification.
{
"@odata.id": "/redfish/v1/TaskService/Tasks/545",
"@odata.type": "#Task.v1_5_0.Task",
"Id": "545",
"Name": "Task 545",
"TaskState": "Running",
"StartTime": "2020-10-15T14:44+06:00",
"TargetUri": "/redfish/v1/UpdateService/update-multipart",
"TaskMonitor": "/redfish/v1/TaskService/TaskMonitors/545",
"TaskStatus": "OK",
"Messages": [
{
"@odata.type": "#Message.v1_1_1.Message",
"MessageId": "Update.1.0.UpdateInProgress",
"Message": "An update is in progress.",
"Severity": "OK",
"MessageSeverity": "OK",
"Resolution": "None"
},
{
"@odata.type": "#Message.v1_1_1.Message",
"MessageId": "Update.1.0.TargetDetermined",
"Message": "The target device '/redfish/v1/Managers/BMC' will be updated with ...",
"Severity": "OK",
"MessageSeverity": "OK",
"MessageArgs": [
"/redfish/v1/Managers/BMC",
"Contoso BMC v2.50"
],
"Resolution": "None"
}
]
}
Once the task is complete, the client will need to parse the result of the update operation.
The response body of the update operation will contain an error object with a set of messages, as described by the
"Error responses" clause in the Redfish Specification. The messages in the response will need to be parsed to
determine what updates failed, succeeded, or if other steps need to be taken. The Messages section contains
common messages that can be found in the response.
The OperationTransitionedToJob message from the Update Message Registry requires special handling, since it
indicates that a job has been created for carrying out the remainder of the update operation. In this case, the client
will need to transition to monitoring the job. If the response does not contain this message, the update operation is
complete and the messages in the response describe the outcome of the update operation.
HTTP/1.1 200 OK
{
"error": {
"code": "Update.1.0.OperationTransitionedToJob",
"message": "The update operation has transitioned to the job at URI ...",
"@Message.ExtendedInfo": [
{
"@odata.type": "#Message.v1_1_1.Message",
"MessageId": "Update.1.0.OperationTransitionedToJob",
"Message": "The update operation has transitioned to the job at URI ...",
"Severity": "OK",
"MessageSeverity": "OK",
"MessageArgs": [
"/redfish/v1/JobService/Jobs/1"
],
"Resolution": "None"
}
]
}
}
Jobs allow for more complex interactions with clients, such as pausing until a client performs an operation that allows
the job to continue. In many update scenarios, resets or other actions will be required at some point in the update
flow. Tasks do not allow for these types of semantics. The Messages section contains common messages that can be
found in the job.
Example job:
{
"@odata.id": "/redfish/v1/JobService/Jobs/1",
"@odata.type": "#Job.v1_0_5.Job",
"Id": "1",
"Name": "Job 1",
"JobStatus": "OK",
"JobState": "UserIntervention",
"StartTime": "2020-10-15T14:44+06:00",
"PercentComplete": 85,
"CreatedBy": "admin",
"Payload": {
"TargetUri": "/redfish/v1/UpdateService/update-multipart"
},
"Steps": {
"@odata.id": "/redfish/v1/JobService/Jobs/1/Steps"
},
"Messages": [
{
"@odata.type": "#Message.v1_1_1.Message",
"MessageId": "Update.1.0.UpdateInProgress",
"Message": "An update is in progress.",
"Severity": "OK",
"MessageSeverity": "OK",
"Resolution": "None"
},
{
"@odata.type": "#Message.v1_1_1.Message",
"MessageId": "Update.1.0.TargetDetermined",
"Message": "The target device 'Onboard NIC 1' will be updated with image ...",
"Severity": "OK",
"MessageSeverity": "OK",
"MessageArgs": [
"Onboard NIC 1",
"Contoso NIC Bundle 6.55"
],
"Resolution": "None"
},
{
"@odata.type": "#Message.v1_1_1.Message",
"MessageId": "Update.1.0.AwaitToActivate",
"Message": "Awaiting for an action to proceed with activating image ...",
"Severity": "OK",
"MessageSeverity": "OK",
"MessageArgs": [
"Contoso NIC Bundle 6.55",
"Onboard NIC 1"
],
"Resolution": "Perform the requested action to advance the update operation."
},
{
"@odata.type": "#Message.v1_1_1.Message",
"MessageId": "Base.1.10.ResetRequired",
"Message": "In order to complete the operation, a component reset is required ...",
"Severity": "Warning",
"MessageSeverity": "Warning",
"MessageArgs": [
"/redfish/v1/Systems/1/Actions/ComputerSystem.Reset",
"GracefulRestart"
],
"Resolution": "Perform the required reset action on the specified component."
}
]
}
Clients should monitor the JobState property in the job resource to determine actions that need to be taken, or if
the operation is complete. The following table gives recommendations for how to manage the different states.
The update operation has completed successfully or with warnings. The Messages array contains information about
Completed
which devices were updated.
Exception or The update operation has ended with errors, or has been cancelled by an administrator. The Messages array contains
Cancelled information about which devices were updated, failed, or never attempted.
The update operation requires some action in order to continue. The Messages array contains information about
required actions to take for the update to continue. It's possible clients will require knowledge about the overall state of
UserIntervention
the system before taking actions. For example, if a system reset is required, clients should close processes on the system
prior to issuing a reset.
Others The update operation is still in progress. No actions required at this point.
Jobs allow for "steps" to be shown within a single job with the Steps property. For update operations, a step can be
mapped to an update for an individual device. This allows for showing the progress of an update operation when
multiple devices will be updated from a single update operation. The usage of the StepOrder property is not
required for update operations. Services are expected to determine the appropriate order in which to update devices,
and in many cases, perform parallel updates.
Messages important to the overall flow of the update operation in each of the steps should be reported in the overall
job. This includes messages indicating a device has been identified for update, a device has updated successfully, a
device has failed an update, or a specific action is required. Other types of messages should only be found in their
respective steps. The "Expose in root job" column in the tables found in the Messages section gives guidance for
specific messages to report in the overall job.
Services might delay setting the JobState property of the overall job to UserIntervention if multiple steps are
expected to reach the same state. This could be done to minimize the number of resets carried out by the client.
Once the job enters the Completed , Exception , or Cancelled state, the update operation is complete and the
messages in the job describe the outcome of the update operation.
7 Messages
From Figure 1, the firmware update flow can be divided in several stages:
During each stage, messages within the task, job, and error response provide information on the update operation's
completion status or error conditions. The update operation's stage determines the potential messages that can
reside in the Messages or @Messages.ExtendedInfo properties.
Expose
Registry MessageId Description Expected client reaction in root
job
Indicates that the operation expected an image or other Restart the operation with a
Base ResourceMissingAtURI N/A
resource at the provided URI but none was found. new URI.
Indicates that the URI was valid but the resource or image Restart the operation with a
Base ResourceAtUriInUnknownFormat N/A
at that URI was in a format not supported by the service. new URI.
Indicates that the attempt to access the resource, file, or Restart the operation with a
Base ResourceAtUriUnauthorized N/A
image at the URI was unauthorized. new URI.
Expose
Registry MessageId Description Expected client reaction in root
job
Indicates that the update operation Monitor the job referenced by the
Update OperationTransitionedToJob transitioned to a job for managing message to track the progress of No
the progress of the operation. the update operation.
Expose in
Registry MessageId Description Expected client reaction
root job
Indicates that a target resource or device for a image Continue to monitor the update
Update TargetDetermined Yes
has been determined for update. progress.
Indicates that the service is transferring an image to a Continue to monitor the update
Update TransferringToComponent No
component. progress.
Indicates that the service failed to transfer an image Look at other messages to
Update TransferFailed Yes
to a component. determine corrective actions.
Expose in
Registry MessageId Description Expected client reaction
root job
Indicates that a target resource or device for a image Continue to monitor the update
Update TargetDetermined Yes
has been determined for update. progress.
Expose in
Registry MessageId Description Expected client reaction
root job
Indicates that a target resource or device for a image Continue to monitor the update
Update TargetDetermined Yes
has been determined for update. progress.
Indicates that the component failed to activate the Look at other messages to
Update ActivateFailed Yes
image. determine corrective actions.
Update UpdateSuccessful Indicates that a resource or device was updated. No further actions needed. Yes
8 Appendix A: References
• IETF RFC7578, L. Masinter et al., Returning Values from Forms: multipart/form-data, https://www.ietf.org/rfc/
rfc7578.txt
1.0.0 2021-05-25