diff options
| author | cdadmin <crucibleadmin@cruciblewds.org> | 2017-12-21 12:59:56 -0500 |
|---|---|---|
| committer | Peter Jones <pjones@redhat.com> | 2018-02-28 14:56:10 -0500 |
| commit | 5f4fd5364109c80934b7837255ddde61f572fd69 (patch) | |
| tree | 893f4fdc3944ebf4d574db9e6f758dff3582b236 | |
| parent | bc3b6525d898e130e1e9fbfe76e2f4d890e49148 (diff) | |
| download | efi-boot-shim-5f4fd5364109c80934b7837255ddde61f572fd69.tar.gz efi-boot-shim-5f4fd5364109c80934b7837255ddde61f572fd69.zip | |
Add proxy dhcp support
| -rw-r--r-- | netboot.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -257,10 +257,20 @@ static EFI_STATUS parseDhcp4() { CHAR8 *template = (CHAR8 *)translate_slashes(DEFAULT_LOADER_CHAR); INTN template_len = strlen(template) + 1; + EFI_PXE_BASE_CODE_DHCPV4_PACKET* pkt_v4 = (EFI_PXE_BASE_CODE_DHCPV4_PACKET *)&pxe->Mode->DhcpAck.Dhcpv4; + + if(pxe->Mode->ProxyOfferReceived) { + /* + * Proxy should not have precedence. Check if DhcpAck + * contained boot info. + */ + if(pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile[0] == '\0') + pkt_v4 = &pxe->Mode->ProxyOffer.Dhcpv4; + } - INTN dir_len = strnlena(pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile, 127); + INTN dir_len = strnlena(pkt_v4->BootpBootFile, 127); INTN i; - UINT8 *dir = pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile; + UINT8 *dir = pkt_v4->BootpBootFile; for (i = dir_len; i >= 0; i--) { if (dir[i] == '/') @@ -281,7 +291,7 @@ static EFI_STATUS parseDhcp4() if (dir_len == 0 && dir[0] != '/' && template[0] == '/') template++; strcata(full_path, template); - memcpy(&tftp_addr.v4, pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr, 4); + memcpy(&tftp_addr.v4, pkt_v4->BootpSiAddr, 4); return EFI_SUCCESS; } |
