[ipxe-devel] iPXE download protocols via EFI effort

Geoff Lywood glywood at vmware.com
Wed Aug 10 19:13:06 UTC 2011

----- Original Message ----- 

> From: "Jarrod Johnson" <jarrod.b.johnson at gmail.com>
> To: ipxe-devel at lists.ipxe.org, "Geoff Lywood" <glywood at vmware.com>
> Sent: Wednesday, August 10, 2011 6:29:53 AM
> Subject: iPXE download protocols via EFI effort

> On my tree, I'm porting forward some changes from Geoff Lywood to
> give iPXE the ability to install EFI protocols that chainloaded
> bootloaders can use to get http and such. My goal is a sort of
> 'ielilo' reminiscent of 'ipxelinux' in 'legacy' land. The biggest
> question I have to date would be if the uninstall of the protocol
> should happen where it does, or move to efi_init like the nic
> shutdown code did when Itay modified it...

> Hopefully I'll have something workable for review by end of day (need
> to port over Geoff's cmdline construction which includes populating
> a handle that is needed to keep elilo from hanging like it does with
> ipxe today).

> My next step would be an 'ipxefs' in elilo code to create a
> filesystem 'protocol' over the ipxe protocol in the same way 'netfs'
> constructs one over pxe base code. I briefly contemplated whether it
> would be possible to implement netfs protocols and elilo would 'just
> use it' without code change or even recompile, but decided that
> could be a bad idea even if possible.

For the record, I did put some amount of thought into trying to make iPXE expose a protocol that is defined in the UEFI spec. The options were:

EFI_LOAD_FILE_PROTOCOL: This is unsuitable because it involves loading from a device path. It is difficult to pack a URL into a device path without either defining a new device path node type, or breaking the rules around device path file name formatting (which prohibit a "//"). In either case the client would have to be modified. Additionally, at least for VMware, we wanted a smooth progress bar, and the all-or-nothing nature of this protocol meant loading several hundred megabytes over the network with no user feedback.

EFI_SIMPLE_FILE_SYSTEM_PROTOCOL: This does not work because it requires the ability to seek and such. TFTP just doesn't support the operations necessary.

EFI_PXE_BASE_CODE_PROTOCOL: This one probably makes the most sense, but it's still not a good fit. This protocol is very TFTP- and MTFTP-oriented, and it would be a bit of a hack to try to slip, say, https support in under the covers. Some operations on this protocol don't make as much sense under iPXE, for example what does a "Discover" operation do, given that iPXE supports multiple NICs? And it seemed like a lot of work to expose things like the iPXE routing table, ARP cache, and cached DHCP packets up through this mechanism.

- Geoff

More information about the ipxe-devel mailing list