According UEFI Spec, if valid PXE offer is not received, Pxe.Dhcp() should return EFI_NO_RESPONSE, but currently, EFI_TIMEOUT is returned from Pxe.Dhcp().
This patch is to fix the above issue. Cc: Ye Ting <[email protected]> Cc: Fu Siyuan <[email protected]> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Wu Jiaxin <[email protected]> --- NetworkPkg/UefiPxeBcDxe/PxeBcBoot.c | 2 +- NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcBoot.c b/NetworkPkg/UefiPxeBcDxe/PxeBcBoot.c index fc50a82..0bb1d66 100644 --- a/NetworkPkg/UefiPxeBcDxe/PxeBcBoot.c +++ b/NetworkPkg/UefiPxeBcDxe/PxeBcBoot.c @@ -1240,11 +1240,11 @@ ON_EXIT: } else if (Status == EFI_OUT_OF_RESOURCES) { AsciiPrint ("\n PXE-E09: Could not allocate I/O buffers.\n"); } else if (Status == EFI_NO_MEDIA) { AsciiPrint ("\n PXE-E12: Could not detect network connection.\n"); } else if (Status == EFI_NO_RESPONSE) { - AsciiPrint ("\n PXE-E16: No offer received.\n"); + AsciiPrint ("\n PXE-E16: No valid offer received.\n"); } else if (Status == EFI_TIMEOUT) { AsciiPrint ("\n PXE-E18: Server response timeout.\n"); } else if (Status == EFI_ABORTED) { AsciiPrint ("\n PXE-E21: Remote boot cancelled.\n"); } else if (Status == EFI_ICMP_ERROR) { diff --git a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c index 97829e9..101c658 100644 --- a/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c +++ b/NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c @@ -1705,10 +1705,15 @@ PxeBcDhcp4Dora ( Status = Dhcp4->Start (Dhcp4, NULL); if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) { if (Status == EFI_ICMP_ERROR) { PxeMode->IcmpErrorReceived = TRUE; } + + if (Status == EFI_TIMEOUT && Private->OfferNum > 0) { + Status = EFI_NO_RESPONSE; + } + goto ON_EXIT; } // // Get the acquired IPv4 address and store them. -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

