NVIDIA BlueField BMC Software

Boot Configuration


BMC supports boot option selection commands using the Redfish or IPMI interfaces. UEFI on NVIDIA® BlueField® can query for the boot options through an IPMI/Redfish command. The BMC IPMI command supports changing the boot device selector flag only through the following options: PXE boot, or the default boot device as selected in the boot menu on BlueField. In contrast, the Redfish interface supports all available boot options.

Boot Config Using Redfish

Retrieving Active Boot Configuration Values

  • To retrieve the active boot configuration, run:

    curl -k -u root:'<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield
    


    The relevant configurations are under Boot.


  • To retrieve all boot options (active and pending), run:

    curl -k -u root:'<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/BootOptions/
    


  • To retrieve detailed information on a specific boot option, run:

    curl -k -u root:'<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/BootOptions/<boot-option>
    


Retrieving Information on Pending Boot Configurations

  • To retrieve the pending boot settings, run:

    curl -k -u root:'<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings
    


  • The following command retrieves only BootOptions configurations with a pending value different than the active one.

    curl -k -u root:'<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings/BootOptions
    


  • To retrieve the details of a specific pending boot option, run:

    curl -k -u root:'<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings/BootOptions/<boot-id>
    

Applying Pending Boot Configurations

Power reset of BlueField is necessary for these changes to take effect.

  • To alter the boot configuration, it is required to apply patches to the setting attribute. Run: 

    curl -k -u root:'<password>' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings -d '{"Boot":{ ... }}'
    


    • To set the pending boot order, run the following command. The list must contain all boot options, including those that are disabled.

      curl -k -u root:'<password>' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings/ -d  '{"Boot":{ "BootOrder": ["Boot0002",...,"BootXXX"] }}'
      


  • To alter the bootOption value, run the following command.


    curl -k -u root:'<password>' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings/BootOptions/<Boot id> -d '{"BootOptionEnabled": false}'
    

    Currently, only BootOptionEnable is supported.

Changing BootOrder Configuration

To set boot order using a boot order schema, follow the procedure described below.

  1. Retrieve the current boot order using a GET on the ComputerSystem schema over the 1GbE OOB connection to the BlueField BMC. Look for the BootOrder attribute under the Boot

    curl -k -X GET -u root:<password> https://<BF-BMC-IP>/redfish/v1/Systems/<SystemID>/ | python3 -m json.tool
    {
     ....
     "Boot": {
    	....
    "BootOrder": [
                	"Boot0017",
                	"Boot0001",
                	"Boot0002",
                	"Boot0003",
               		"Boot0004",
                	"Boot0005",
                	"Boot0006",
                	"Boot0007",
     	],
    	....
         }
    ....
    }
    


  2. To get the details of a particular entity in the BootOrder array, perform a GET to the respective BootOption URL over the 1GbE OOB connection to the BlueField BMC. For example, to get details of Boot0006, run: 

    curl -k -X GET -u root:<password> https://<BF-BMC-IP>/redfish/v1/Systems/<SystemID>/BootOptions/Boot0006 | python3 -m json.tool
    
    {
        "@odata.type": "#BootOption.v1_0_3.BootOption",
        "@odata.id": "/redfish/v1/Systems/SystemId/BootOptions/Boot0006",
        "Id": "Boot0006",
        "BootOptionEnabled": true,
        "BootOptionReference": "Boot0006",
        "DisplayName": "UEFI HTTPv6 (MAC:B8CEF6B8A006)",
        "UefiDevicePath":   "PciRoot(0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/MAC(B8CEF6B8A006,0x1)/IPv6(0000:0000:0000:0000:0000:0000:0000:0000,0x0,Static,0000:0000:0000:0000:0000:0000:0000:0000,0x40,0000:0000:0000:0000:0000:0000:0000:0000)/Uri()"
    }
    


  3. To change the boot order, the entire BootOrder array must be PATCHed to the pending settings URI. For this example of the BootOrder array, and if you intend to have Boot0006 at the beginning of the array, use the following PATCH operation: 

    Updating the BootOrder array results in a permanent boot order change (persistent across reboots).


    curl -k -u root:<password> -X PATCH -d '{ "Boot": { "BootOrder": [ "Boot0006", "Boot0017", "Boot0001", "Boot0002", "Boot0003", "Boot0004", "Boot0005", "Boot0007", ] }}' https://<BF-BMC-IP>/redfish/v1/Systems/<SystemID>/Settings | python3 -m json.tool
    


  4. After a successful PATCH, reboot BlueField and check if the settings have been applied using a GET on the ComputerSystem schema.

  5. If the BootOrder array is updated as intended, then the settings have been applied and the BlueField device should boot as per the order in preceding cycles.

Example of Changing BootOrder Configuration

  • Get the supported boot options.

curl -k -u root:<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/BootOptions 
{ 
  "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions", 
  "@odata.type": "#BootOptionCollection.BootOptionCollection", 
  "Members": [ 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0000" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot000A" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot000B" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot000C" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot000D" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot000E" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot000F" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0001" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0002" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0003" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0004" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0005" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0006" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0007" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0008" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0009" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0010" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0011" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0012" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0013" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0014" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0015" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0016" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0017" 
    }, 
    { 
      "@odata.id": "/redfish/v1/Systems/Bluefield/BootOptions/Boot0040" 
    } 
  ], 
  "Members@odata.count": 25, 
  "Name": "Boot Option Collection" 
} 
  • Set the pending boot order settings.

In this example, 25 boot options are present. Therefore, the command to establish the boot option order must encompass all 25 options in the active BootOrder list according to the desired sequence.


curl -k -u root:'<password>' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings -d '{"Boot":{ "BootOrder": ["Boot0040", "Boot0017", "Boot0000", "Boot0001", "Boot0002", "Boot0003", "Boot0004", "Boot0005", "Boot0006", "Boot0007", "Boot0008", "Boot0009", "Boot000A", "Boot000B", "Boot000C", "Boot000D", "Boot000E", "Boot000F", "Boot0010", "Boot0011", "Boot0012", "Boot0013", "Boot0014", "Boot0015", "Boot0016"] }}'

Boot Source Override

The Boot Source Override feature provides administrators with remote control over a system's boot sequence, eliminating the need for physical access to configure boot order settings. This capability allows for one-time or persistent boot source overrides, enabling seamless OS deployment, system recovery, and remote diagnostics. Administrators can dynamically set the boot target (for example, PXE) , ensuring flexibility for various operational needs. Boot Source Override is particularly useful for automated provisioning, disaster recovery, firmware updates, and security hardening by enforcing specific boot policies. 

Boot Source Override Config Using RedFish

Get Boot Source Override Configuration

To retrieve boot source override configuration, run:

curl -k -u root:'<password>' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield


Example for Redfish Boot Source Override Get result:

  "Boot": {
    ...
    "BootSourceOverrideEnabled": "Disabled",
    "BootSourceOverrideMode": "UEFI",
    "BootSourceOverrideTarget": "None",
    ...
   }

The following parameters can be set when configuring the boot source via the Redfish command:

  • BootSourceOverrideEnabled – should be set according to the following values:

    • Disabled – Boot Source Override will be disabled

    • Once – host will use the Boot Source Override settings only during the next host boot

    • Continuous – host will always use the Boot Source Override settings

  • BootSourceOverrideMode – should be set according to the values under redfish/v1/Systems/Bluefield > Boot/BootSourceOverrideMode@Redfish.AllowableValues

  • BootSourceOverrideTarget – should be set according to the values under redfish/v1/Systems/Bluefield > Boot/BootSourceOverrideTarget@Redfish.AllowableValues  


When UefiTarget is selected, make sure that:

  • BootSourceOverrideMode is set to UEFI, and

  • UefiTargetBootSourceOverride is set to one of the UEFI supported BootOptions (e.g., Boot0007).


  • UefiTargetBootSourceOverride – this option will be available in the RF JSON if BootSourceOverrideTarget is set to UefiTarget

  • AutomaticRetryConfig – only Disabled is supported

  • BootNext – this option will be in the RF JSON if BootSourceOverrideTarget is set to UefiBootnext

Set Boot Source Override Configuration

To set the Boot Source Override command, use the following redfish command: 

curl -k -u root:'<password>' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings -d '{ 

"Boot":{ 
        "BootSourceOverrideEnabled": "<OverrideEnabled>", 
        "BootSourceOverrideMode": "<Mode>", 
        "BootSourceOverrideTarget": "<Target>"
    } 
}'


Boot Override Setting will be utilized by the BIOS/UEFI on the next boot and will be reflected in the redfish/v1/Systems/Bluefield boot schema.


Example for Redfish Boot Source Override command, setting next boot non-persistent to PXE boot: 

curl -k -u root:'<password>' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Settings -d '{ 

"Boot":{ 
        "BootSourceOverrideEnabled": "Once", 
        "BootSourceOverrideMode": "UEFI", 
        "BootSourceOverrideTarget": "Pxe"
    } 
}'

Boot Source Override Config Using IPMI

ipmitool provides the ability to manage the Boot Source Override option and to configure the system to boot from a PXE server.

  • Get current setting: This give information about: If the option is valid.Is it persistence or only for the next boot.Boot type.

  • ipmitool chassis bootparam get 5
    
  • Change the boot override settings to one-time enforce PXE boot with a 60 seconds timeout. If the DPU is not reset within 60 seconds, the boot parameters will be invalid:

     ipmitool chassis bootparam set bootflag force_pxe options=timeout
    
  • Change the boot override settings to one-time enforce PXE boot without the 60 seconds timeout. 

     ipmitool chassis bootparam set bootflag force_pxe options=no-timeout
    

    The timer is only relevant for BF3.

    It is not recommended to use the ipmitool chassis bootparam without specifying the options, otherwise, the timer behavior is unexpected.


  • Change the boot override settings to the default boot device:

    ipmitool chassis bootparam set bootflag none
    
  • Set the host to always use the boot override settings. This command will not trigger the 60 second timer.

    ipmitool chassis bootdev pxe options=persistent

    info

    Whenever the user modifies the bootdev or bootparm settings, the persistent option will be disabled unless the persistent option is specifically enabled.

The BlueField  Boot Source Override setting from BMC is persistent until it is set to none or until the BFB image is updated again.

Last updated: