[PATCH v2 0/3] Support IPMI "Boot Initiator Mailbox"

Samuel Mendoza-Jonas sam at mendozajonas.com
Thu Dec 13 11:51:56 AEDT 2018


On Tue, 2018-12-11 at 13:40 +1100, Samuel Mendoza-Jonas wrote:
> Add support for the IPMI Get/Set System Boot Options command parameter
> 7, "Boot Initator Mailbox", to parse an alternate boot order
> configuration.
> 
> A brief description of the mailbox for interested BMC people below; for
> details see section 28.13 in the IPMI spec.
> 
> Petitboot already takes advantage of the Get/Set System Boot Option
> commands to recognise "boot overrides" that have been set. Specifically
> this uses parameter 5, "boot flags", of the command as described by Table
> 28, "Boot Option Parameters" in the IPMI spec. These boot flags are
> limited to generic options such as "boot from disk", "boot from network",
> etc.
> 
> What this series does it take advantage of parameter 7, "boot initiator
> mailbox", in the same command. The difference here is that this is just a
> bunch of space we can put something into. In particular we're using it to
> hold a "petitboot,bootdevs=..." parameter the same as we would in NVRAM.
> 
> The content of parameter 7 is
> 	1 byte: block number
> 	2-17 bytes: block data
> 
> The BMC is required to hold *at least* 80 bytes of data, which means 5
> blocks (16 bytes * 5 = 80 bytes).
> 
> The BMC is also required to set the first 3 bytes of the first block to
> an IANA Enterprise ID Number. This series recognises the IBM number (2)
> so the first three bytes must be 2, 0, 0 (least-significant first).
> 
> So to store the string "petitboot,bootdevs="net usb disk" the format of
> the blocks would be:
> 
> 0:	|2|0|0|p|e|t|i|t|b|o|o|t|,|b|o|o|
> 1:	|t|d|e|v|s|=|n|e|t| |u|s|b| |d|i|
> 2:	|s|k| | | | | | | | | | | | | | |
> 
> The string must be null-terminated but the remaining buffer contents do
> not necessarily need to be set.
> Petitboot will request up to 255 blocks (stopping when it first receives
> an error) and then use this string if it is present in order to set the
> boot order. I would *highly* recommend a BMC supports well over 5 blocks
> so that we can fit disk UUIDS and LV names.
> 
> Each block is selected individually, eg. Petitboot will send several
> requests like,
> 	get-sys-boot-option, parameter 7, block 0
> 	get-sys-boot-option, parameter 7, block 1
> 	get-sys-boot-option, parameter 7, block 2
> 	...
> 
> And the BMC must return the corresponding block. Petitboot will similarly
> send set-sys-boot-option commands to set the buffer (to clear it for
> example).
> 
> The script in patch two lays out the raw format for get & set to use with
> ipmitool, and basically shows what the BMC would need to expect and how
> to respond.
> 
> These details can be found in section 28.13 in v2 rev1.1 of the IPMI
> spec, and page 398 specifically for the mailbox.
> 
> 
> Changes in v2:
> Update get_ipmi_boot_mailbox() to support up to 255 blocks and partial
> reads since the spec says it's possible.
> Fixup some error messages in the helper utility.
> Cleanup an error condition and support 255 blocks in
> clear_ipmi_boot_mailbox().

Merged with some minor reshuffling as 95ec722a

> 
> Samuel Mendoza-Jonas (3):
>   discover/platform-powerpc: read bootdev config from IPMI boot mailbox
>   utils: Add helper to send mailbox request
>   ui/ncurses: Add option to clear IPMI boot mailbox
> 
>  discover/platform-powerpc.c   | 257 ++++++++++++++++++++++++++++++++++
>  discover/platform.c           |   2 +-
>  discover/platform.h           |   2 +
>  lib/pb-config/pb-config.c     |   1 +
>  lib/pb-protocol/pb-protocol.c |   6 +
>  lib/types/types.h             |   1 +
>  ui/ncurses/nc-config.c        |  49 ++++++-
>  utils/ipmi-mailbox-config.py  | 166 ++++++++++++++++++++++
>  8 files changed, 482 insertions(+), 2 deletions(-)
>  create mode 100755 utils/ipmi-mailbox-config.py
> 




More information about the Petitboot mailing list