> For the complete documentation index, see [llms.txt](https://doc.engenius.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.engenius.ai/smartnic-redfish-user-guide/integration-and-troubleshooting/firmware-update-workflow-examples.md).

# Firmware Update Workflow Examples

This chapter shows two common Redfish firmware-update workflows on the EnGenius SmartNIC—**HTTP push** and **SimpleUpdate (TFTP)**—plus post-update validation with **FirmwareInventory**. Use these steps only if supported by your current Firmware.

#### Pre-checks

* Confirm HTTPS reachability and an **Administrator** account.
* Schedule a maintenance window; updates are disruptive.
* Identify the image type (for example, BMC or BIOS) and any required reset behavior.
* Verify image integrity (for example, compare a published **SHA-256** checksum).
* Ensure stable management-network connectivity during the update.

#### Supported methods&#x20;

<table><thead><tr><th width="132.5555419921875">Method</th><th width="172.7777099609375">Direction</th><th width="202.111083984375">Transport</th><th>Notes</th></tr></thead><tbody><tr><td>HTTP push</td><td>Workstation → BMC</td><td>HTTP/HTTPS upload to <code>HttpPushUri</code></td><td>Requires <code>HttpPushUri</code> to be present in <code>UpdateService</code>.</td></tr><tr><td>SimpleUpdate (TFTP)</td><td>BMC → Server</td><td>TFTP pull from <code>ImageURI</code></td><td>Use only on a secured management network.</td></tr><tr><td>ApplyTime options</td><td>N/A</td><td>N/A</td><td>Common values: <code>Immediate</code>, <code>OnReset</code> (<em>if supported</em>).</td></tr></tbody></table>

#### Authentication options

Prefer a session token over Basic auth in production.

```bash
curl -s -k -X POST "https://${BMC_IP}/redfish/v1/SessionService/Sessions"
-H "Content-Type: application/json"
-d "{"UserName":"${USERNAME}","Password":"${PASSWORD}"}"
```

> Save the value of `X-Auth-Token` from the response headers as `${TOKEN}` for use below.

#### Workflow A — HTTP Push (workstation → BMC)

1. **Set ApplyTime**

```bash
curl -s -X PATCH "https://${BMC_IP}/redfish/v1/UpdateService"
-H "X-Auth-Token: ${TOKEN}"
-H "Content-Type: application/json"
-d '{"HttpPushUriOptions":{"HttpPushUriApplyTime":{"ApplyTime":"Immediate"}}}'
```

2. Discover upload target

```bash
curl -s -X GET "https://${BMC_IP}/redfish/v1/UpdateService"
-H "X-Auth-Token: ${TOKEN}"
```

> Capture the value of `HttpPushUri` if present.

3. **Upload the image**

```bash
curl -s -X POST "${HTTP_PUSH_URI}"
-H "X-Auth-Token: ${TOKEN}"
-H "Content-Type: application/octet-stream"
--data-binary @"${IMAGE_FILE}" -i
```

> The response should include a **Task** reference (for example, a `Location` header or a Task object).

4. Monitor progress

```bash
curl -s -X GET "https://${BMC_IP}/redfish/v1/TaskService/Tasks/${TASK_ID}"
-H "X-Auth-Token: ${TOKEN}"
```

```bash
{
"TaskState": "Running",
"TaskStatus": "OK",
"PercentComplete": 42
}
```

> Wait for `TaskState` to become `Completed` (and `TaskStatus` to indicate success) or another terminal state.

#### Workflow B — SimpleUpdate (BMC → TFTP server)

1. **Trigger pull**

```bash
curl -s -X POST "https://${BMC_IP}/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate"
-H "X-Auth-Token: ${TOKEN}"
-H "Content-Type: application/json"
-d "{"ImageURI":"tftp://${TFTP_SERVER}/${IMAGE_PATH}","TransferProtocol":"TFTP"}" -i
```

2. **Monitor the task**

```bash
curl -s -X GET "https://${BMC_IP}/redfish/v1/TaskService/Tasks/${TASK_ID}"
-H "X-Auth-Token: ${TOKEN}"
```

#### Post-update validation

```bash
curl -s -X GET "https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory"
-H "X-Auth-Token: ${TOKEN}"
```

```bash
curl -s -X GET "https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory/${ITEM_ID}"
-H "X-Auth-Token: ${TOKEN}"
```

> Verify fields such as `Version`, `Updateable`, and related links. Inventory member names vary by Firmware—do not assume fixed IDs.

{% hint style="info" %}
**Risk notes**

> * Use **trusted certificates** and HTTPS; avoid `-k` outside of controlled labs.
> * Do **not** interrupt an in-progress update. Wait for `TaskState=Completed` and verify versions before returning the node to service.
> * Some image types (for example, **BIOS**) may require a full power-off reset (*if required by your platform*).
> * Keep `TaskService` output and relevant `LogService` entries for audit and troubleshooting.
> * TFTP is unauthenticated; restrict to an isolated management segment or prefer HTTP push where possible.
>   {% endhint %}

{% hint style="info" %}
**Automation tip**\
Chain the steps with `curl + jq` (apply-time → get `HttpPushUri` → upload → follow `TaskState`) to make the workflow repeatable across maintenance windows.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://doc.engenius.ai/smartnic-redfish-user-guide/integration-and-troubleshooting/firmware-update-workflow-examples.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
