]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c
Use siaddr in DHCP packet, if zero, use option 54 instead.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDhcp.c
index c04b2032c7762224808452627f722b840b7feb48..5e86cf5779e6cc10e2789bc221dcaaad79820c5e 100644 (file)
@@ -275,10 +275,11 @@ PxeBcTryBinl (
   Offer = &Private->Dhcp4Offers[Index].Packet.Offer;\r
 \r
   //\r
-  // use option 54, if zero, use siaddr in header\r
+  // Use siaddr(next server) in DHCPOFFER packet header, if zero, use option 54(server identifier)\r
+  // in DHCPOFFER packet.\r
+  // (It does not comply with PXE Spec, Ver2.1)\r
   //\r
-  ZeroMem (&ServerIp, sizeof(EFI_IP_ADDRESS));\r
-  if (Private->Dhcp4Offers[Index].Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_SERVER_ID] != NULL) {\r
+  if (EFI_IP4_EQUAL (&Offer->Dhcp4.Header.ServerAddr.Addr, &mZeroIp4Addr)) {\r
     CopyMem (\r
       &ServerIp.Addr[0],\r
       Private->Dhcp4Offers[Index].Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_SERVER_ID]->Data,\r
@@ -1113,8 +1114,6 @@ PxeBcDiscvBootService (
   EFI_DHCP4_HEADER                    *DhcpHeader;\r
   UINT32                              Xid;\r
 \r
-  ASSERT (IsDiscv && (Layer != NULL));\r
-\r
   Mode      = Private->PxeBc.Mode;\r
   Dhcp4     = Private->Dhcp4;\r
   Status    = EFI_SUCCESS;\r
@@ -1136,6 +1135,7 @@ PxeBcDiscvBootService (
   OptCount = PxeBcBuildDhcpOptions (Private, OptList, FALSE);\r
 \r
   if (IsDiscv) {\r
+    ASSERT (Layer != NULL);\r
     //\r
     // Add vendor option of PXE_BOOT_ITEM\r
     //\r
@@ -1715,10 +1715,10 @@ PxeBcSelectBootMenu (
   }\r
 \r
   while (MenuSize > 0) {\r
-    MenuArray[Index]  = MenuItem;\r
+    MenuArray[Index++]  = MenuItem;\r
     MenuSize          = (UINT8) (MenuSize - (MenuItem->DescLen + 3));\r
     MenuItem          = (PXEBC_BOOT_MENU_ENTRY *) ((UINT8 *) MenuItem + MenuItem->DescLen + 3);\r
-    if (Index++ > (PXEBC_MAX_MENU_NUM - 1)) {\r
+    if (Index >= PXEBC_MAX_MENU_NUM) {\r
       break;\r
     }\r
   }\r
@@ -1738,6 +1738,7 @@ PxeBcSelectBootMenu (
   TopRow  = gST->ConOut->Mode->CursorRow - MenuNum;\r
 \r
   do {\r
+    ASSERT (Select < PXEBC_MAX_MENU_NUM);\r
     //\r
     // highlight selected row\r
     //\r