Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenNetworkBoot: Add PXE and HTTP(S) Boot support #562

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

mikebeaton
Copy link
Contributor

@mikebeaton mikebeaton commented Oct 8, 2024

This is simply a rebase (replacing #554), now that the previous two changes #552 #553 are merged.

I was surprised how much of network boot is done in the OVMF UI package. Hence needing to take (sometimes with small mods) several bits of that, in the files imported from EDK 2; and then needing to reimplement the rest of it, in the rest of this driver. Doing it that way means it works with existing network boot drivers, up to the top level of the network boot stack; and means it works, full stop, i.e. no need to try to work out from scratch the correct usage patterns for the lower level network libraries, which are very low level (e.g. you can't 'just' issue a GET or a POST in http, very far from it).

The three commits here are: 1. import three edk 2 files; 2. clean them down to just what I kept and modified; 3. everything else, so if you review just the third commit, it is much easier to see what I changed from the originals in BmBoot.c, BmBootDescription.c and TlsAuthConfigImpl.c.

As before, the biggest change for the rest of the project is switching to use the CryptoPkg intrinsics lib. Maybe that change per se could be discussed independent of reviewing the rest of this? (REFS: #555; acidanthera/audk#67; tianocore/edk2#6169 - based on these refs, I say a) we should use it, and b) we should leave it where it is (not move to MdePkg) for now.)

@mikebeaton mikebeaton changed the title Network boot (replaces #554) OpenNetworkBoot: Add PXE and HTTP(S) Boot support Oct 8, 2024
Comment on lines 16 to 36
Expand the media device path which points to a BlockIo or SimpleFileSystem instance
by appending EFI_REMOVABLE_MEDIA_FILE_NAME.

@return The option number of the found boot option.
@param DevicePath The media device path pointing to a BlockIo or SimpleFileSystem instance.
@param FullPath The full path returned by the routine in last call.
Set to NULL in first call.

@return The next possible full path pointing to the load option.
Caller is responsible to free the memory.
**/
UINTN
BmFindBootOptionInVariable (
IN EFI_BOOT_MANAGER_LOAD_OPTION *OptionToFind
EFI_DEVICE_PATH_PROTOCOL *
BmExpandMediaDevicePath (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
IN EFI_DEVICE_PATH_PROTOCOL *FullPath
)
{
EFI_STATUS Status;
EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
UINTN OptionNumber;
CHAR16 OptionName[BM_OPTION_NAME_LEN];
EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
UINTN BootOptionCount;
UINTN Index;

OptionNumber = LoadOptionNumberUnassigned;

//
// Try to match the variable exactly if the option number is assigned
//
if (OptionToFind->OptionNumber != LoadOptionNumberUnassigned) {
UnicodeSPrint (
OptionName,
sizeof (OptionName),
L"%s%04x",
mBmLoadOptionName[OptionToFind->OptionType],
OptionToFind->OptionNumber
);
Status = EfiBootManagerVariableToLoadOption (OptionName, &BootOption);

if (!EFI_ERROR (Status)) {
ASSERT (OptionToFind->OptionNumber == BootOption.OptionNumber);
if ((OptionToFind->Attributes == BootOption.Attributes) &&
(StrCmp (OptionToFind->Description, BootOption.Description) == 0) &&
(CompareMem (OptionToFind->FilePath, BootOption.FilePath, GetDevicePathSize (OptionToFind->FilePath)) == 0) &&
(OptionToFind->OptionalDataSize == BootOption.OptionalDataSize) &&
(CompareMem (OptionToFind->OptionalData, BootOption.OptionalData, OptionToFind->OptionalDataSize) == 0)
)
{
OptionNumber = OptionToFind->OptionNumber;
}

EfiBootManagerFreeLoadOption (&BootOption);
}
}
EFI_STATUS Status;
EFI_HANDLE Handle;
EFI_BLOCK_IO_PROTOCOL *BlockIo;
VOID *Buffer;
EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;
Copy link
Contributor Author

@mikebeaton mikebeaton Oct 8, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The diff for BmBoot.c (here and onwards), as viewed at the second commit (which is why this comment says it is 'Outdated'), is misleading; the second commit only deletes lines, as can be seen e.g. with git diff --minimal network-boot~2 network-boot~ at the command line.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

1 participant