/** @file\r
Functions implementation related with DHCPv4 for UefiPxeBc Driver.\r
\r
- Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
//\r
// Zero the Guid to indicate NOT programable if failed to get system Guid.\r
//\r
+ DEBUG ((EFI_D_WARN, "PXE: Failed to read system GUID from the smbios table!\n"));\r
ZeroMem (OptEnt.Uuid->Guid, sizeof (EFI_GUID));\r
}\r
\r
//\r
Private->OfferIndex[OfferType][Private->OfferCount[OfferType]] = Private->OfferNum;\r
Private->OfferCount[OfferType]++;\r
- } else if (Private->OfferCount[OfferType] > 0) {\r
+ } else if ((OfferType == PxeOfferTypeProxyPxe10 || OfferType == PxeOfferTypeProxyWfm11a) && \r
+ Private->OfferCount[OfferType] < 1) {\r
//\r
// Only cache the first PXE10/WFM11a offer, and discard the others.\r
//\r
return EFI_SUCCESS;\r
}\r
\r
+ ASSERT (Packet != NULL);\r
+\r
Private = (PXEBC_PRIVATE_DATA *) Context;\r
Mode = Private->PxeBc.Mode;\r
Callback = Private->PxeBcCallback;\r
//\r
// Zero the Guid to indicate NOT programable if failed to get system Guid.\r
//\r
+ DEBUG ((EFI_D_WARN, "PXE: Failed to read system GUID from the smbios table!\n"));\r
ZeroMem (Packet->Dhcp4.Header.ClientHwAddr, sizeof (EFI_GUID));\r
}\r
Packet->Dhcp4.Header.HwAddrLen = (UINT8) sizeof (EFI_GUID);\r
break;\r
\r
case Dhcp4SelectOffer:\r
+ ASSERT (NewPacket != NULL);\r
+ \r
//\r
// Select offer by the default policy or by order, and record the SelectIndex\r
// and SelectProxyType.\r
//\r
// Zero the Guid to indicate NOT programable if failed to get system Guid.\r
//\r
+ DEBUG ((EFI_D_WARN, "PXE: Failed to read system GUID from the smbios table!\n"));\r
ZeroMem (Token.Packet->Dhcp4.Header.ClientHwAddr, sizeof (EFI_GUID));\r
}\r
Token.Packet->Dhcp4.Header.HwAddrLen = (UINT8) sizeof (EFI_GUID);\r
ZeroMem (Private->OfferCount, sizeof (Private->OfferCount));\r
ZeroMem (Private->OfferIndex, sizeof (Private->OfferIndex));\r
\r
- //\r
- // Start DHCPv4 D.O.R.A. process to acquire IPv4 address. This may \r
- // have already been done, thus do not leave in error if the return\r
- // code is EFI_ALREADY_STARTED.\r
- //\r
Status = Dhcp4->Start (Dhcp4, NULL);\r
- if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) {\r
+ if (EFI_ERROR (Status)) {\r
if (Status == EFI_ICMP_ERROR) {\r
PxeMode->IcmpErrorReceived = TRUE;\r
}\r
+\r
+ if (Status == EFI_TIMEOUT && Private->OfferNum > 0) {\r
+ Status = EFI_NO_RESPONSE;\r
+ }\r
+ \r
goto ON_EXIT;\r
}\r
\r