]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. sync PXE boot trackers for Windows 2008 server.
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 16 Mar 2009 06:45:46 +0000 (06:45 +0000)
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 16 Mar 2009 06:45:46 +0000 (06:45 +0000)
2. fixed one bug for SetIpfilter().

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7886 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDriver.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c

index db19d15ead436bfa22c26cc1b4f74626ae7e4c8a..59bd95f13a98c37374b9a2f28a607dc931e2efbd 100644 (file)
@@ -277,20 +277,26 @@ PxeBcTryBinl (
   ASSERT (Private->Dhcp4Offers[Index].OfferType == DHCP4_PACKET_TYPE_BINL);\r
 \r
   Offer = &Private->Dhcp4Offers[Index].Packet.Offer;\r
-  if (Offer->Dhcp4.Header.ServerAddr.Addr[0] == 0) {\r
-    //\r
-    // next server ip address is zero, use server id option instead.\r
-    //\r
+\r
+  //\r
+  // use option 54, if zero, use siaddr in header\r
+  //\r
+  ZeroMem (&ServerIp, sizeof(EFI_IP_ADDRESS));\r
+  if (Private->Dhcp4Offers[Index].Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_SERVER_ID] != NULL) {\r
     CopyMem (\r
       &ServerIp.Addr[0],\r
       Private->Dhcp4Offers[Index].Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_SERVER_ID]->Data,\r
       sizeof (EFI_IPv4_ADDRESS)\r
       );\r
   } else {\r
-    //\r
-    // use next server ip address.\r
-    //\r
-    CopyMem (&ServerIp.Addr[0], &Offer->Dhcp4.Header.ServerAddr, sizeof (EFI_IPv4_ADDRESS));\r
+    CopyMem (\r
+      &ServerIp.Addr[0], \r
+      &Offer->Dhcp4.Header.ServerAddr, \r
+      sizeof (EFI_IPv4_ADDRESS)\r
+      );\r
+  }\r
+  if (ServerIp.Addr[0] == 0) {\r
+    return FALSE;\r
   }\r
 \r
   CachedPacket = &Private->ProxyOffer;\r
index 82a19d75177abcf4c654aa6f7eae927a2b1d6906..77c3077b5e77d8613d8e0a2d82724f725126bbf0 100644 (file)
@@ -336,7 +336,7 @@ PxeBcDriverBindingStart (
   Private->Udp4CfgData.TypeOfService      = DEFAULT_ToS;\r
   Private->Udp4CfgData.TimeToLive         = DEFAULT_TTL;\r
   Private->Udp4CfgData.DoNotFragment      = FALSE;\r
-  Private->Udp4CfgData.ReceiveTimeout     = 10000;  // 10 milliseconds\r
+  Private->Udp4CfgData.ReceiveTimeout     = 50000;  // 50 milliseconds\r
   Private->Udp4CfgData.UseDefaultAddress  = FALSE;\r
 \r
   PxeBcInitSeedPacket (&Private->SeedPacket, Private->Udp4Read);\r
index bed82ae21cff71f2cd27bfa31c81bfb0b472cd57..5a17537b1266b51bf7dbfe74e7a1698219ca8a01 100644 (file)
@@ -642,21 +642,12 @@ EfiPxeBcDhcp (
 \r
     ASSERT (Dhcp4Mode.State == Dhcp4Bound);\r
 \r
-    CopyMem (\r
-      &Private->StationIp, \r
-      &Dhcp4Mode.ClientAddress, \r
-      sizeof (EFI_IPv4_ADDRESS)\r
-      );\r
-    CopyMem (\r
-      &Private->SubnetMask, \r
-      &Dhcp4Mode.SubnetMask, \r
-      sizeof (EFI_IPv4_ADDRESS)\r
-      );\r
-    CopyMem (\r
-      &Private->GatewayIp, \r
-      &Dhcp4Mode.RouterAddress, \r
-      sizeof (EFI_IPv4_ADDRESS)\r
-      );\r
+    CopyMem (&Private->StationIp, &Dhcp4Mode.ClientAddress, sizeof (EFI_IPv4_ADDRESS));\r
+    CopyMem (&Private->SubnetMask, &Dhcp4Mode.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+    CopyMem (&Private->GatewayIp, &Dhcp4Mode.RouterAddress, sizeof (EFI_IPv4_ADDRESS));\r
+\r
+    CopyMem (&Mode->StationIp, &Private->StationIp, sizeof (EFI_IPv4_ADDRESS));\r
+    CopyMem (&Mode->SubnetMask, &Private->SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
 \r
     //\r
     // Check the selected offer to see whether BINL is required, if no or BINL is\r
@@ -1138,10 +1129,6 @@ EfiPxeBcMtftp (
               BufferSize\r
               );\r
 \r
-    if (!EFI_ERROR (Status)) {\r
-      Status = EFI_BUFFER_TOO_SMALL;\r
-    }\r
-\r
     break;\r
 \r
   case EFI_PXE_BASE_CODE_TFTP_READ_FILE:\r
@@ -1603,9 +1590,10 @@ TRY_AGAIN:
     RxData  = Token.Packet.RxData;\r
     Session = &RxData->UdpSession;\r
 \r
-    Matched = FALSE;\r
+    Matched = TRUE;\r
 \r
     if ((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER) != 0) {\r
+      Matched = FALSE;\r
       //\r
       // Check UDP package by IP filter settings\r
       //\r
@@ -2509,16 +2497,24 @@ DiscoverBootFile (
     Packet = &Private->Dhcp4Ack;\r
   }\r
 \r
-  CopyMem (&Private->ServerIp, &Packet->Packet.Offer.Dhcp4.Header.ServerAddr, sizeof (EFI_IPv4_ADDRESS));\r
-  if (Private->ServerIp.Addr[0] == 0) {\r
-    //\r
-    // next server ip address is zero, use option 54 instead\r
-    //\r
+  //\r
+  // use option 54, if zero, use siaddr in header\r
+  //\r
+  if (Packet->Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_SERVER_ID] != NULL) {\r
     CopyMem (\r
       &Private->ServerIp,\r
       Packet->Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_SERVER_ID]->Data,\r
       sizeof (EFI_IPv4_ADDRESS)\r
       );\r
+  } else {\r
+    CopyMem (\r
+      &Private->ServerIp, \r
+      &Packet->Packet.Offer.Dhcp4.Header.ServerAddr, \r
+      sizeof (EFI_IPv4_ADDRESS)\r
+      );\r
+  }\r
+  if (Private->ServerIp.Addr[0] == 0) {\r
+    return EFI_DEVICE_ERROR;\r
   }\r
 \r
   ASSERT (Packet->Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_BOOTFILE] != NULL);\r
@@ -2658,10 +2654,25 @@ EfiPxeLoadFile (
 \r
     if (sizeof (UINTN) < sizeof (UINT64) && (TmpBufSize > 0xFFFFFFFF)) {\r
       Status = EFI_DEVICE_ERROR;\r
-    } else {\r
+    } else if (*BufferSize >= (UINTN) TmpBufSize && Buffer != NULL) {\r
+      *BufferSize = (UINTN) TmpBufSize;\r
+      Status = PxeBc->Mtftp (\r
+                        PxeBc,\r
+                        EFI_PXE_BASE_CODE_TFTP_READ_FILE,\r
+                        Buffer,\r
+                        FALSE,\r
+                        &TmpBufSize,\r
+                        &BlockSize,\r
+                        &Private->ServerIp,\r
+                        (UINT8 *) Private->BootFileName,\r
+                        NULL,\r
+                        FALSE\r
+                        );\r
+       } else {\r
       *BufferSize = (UINTN) TmpBufSize;\r
+      Status      = EFI_BUFFER_TOO_SMALL;\r
     }\r
-  } else if (Buffer == NULL) {\r
+  } else if (Buffer == NULL || Private->FileSize > *BufferSize) {\r
     *BufferSize = Private->FileSize;\r
     Status      = EFI_BUFFER_TOO_SMALL;\r
   } else {\r
index 296861f12de4c9ef24c3b841344c02f46e696780..f30898730e47c5b91d11974ae9a5c58ee07cdb57 100644 (file)
@@ -197,6 +197,7 @@ PxeBcConfigureUdpWriteInstance (
   Udp4CfgData.ReceiveTimeout = 1000;\r
   Udp4CfgData.TypeOfService  = DEFAULT_ToS;\r
   Udp4CfgData.TimeToLive     = DEFAULT_TTL;\r
+  Udp4CfgData.AllowDuplicatePort = TRUE;\r
 \r
   CopyMem (&Udp4CfgData.StationAddress, StationIp, sizeof (*StationIp));\r
   CopyMem (&Udp4CfgData.SubnetMask, SubnetMask, sizeof (*SubnetMask));\r