]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDriver.c
enhanced UefiPxeBcDxe to support
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDriver.c
index 48a52ce55d39f075006ae4512bc73e80776f134e..c8ee1f7266c414c8a80ea051a542bb09506ecea2 100644 (file)
@@ -220,6 +220,28 @@ PxeBcDriverBindingStart (
     goto ON_ERROR;\r
   }\r
 \r
+  Status = NetLibCreateServiceChild (\r
+             ControllerHandle,\r
+             This->DriverBindingHandle,\r
+             &gEfiIp4ServiceBindingProtocolGuid,\r
+             &Private->Ip4Child\r
+             );\r
+  if (EFI_ERROR (Status)) {\r
+    goto ON_ERROR;\r
+  }\r
+\r
+  Status = gBS->OpenProtocol (\r
+                  Private->Ip4Child,\r
+                  &gEfiIp4ProtocolGuid,\r
+                  (VOID **) &Private->Ip4,\r
+                  This->DriverBindingHandle,\r
+                  ControllerHandle,\r
+                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    goto ON_ERROR;\r
+  }\r
+\r
   Status = NetLibCreateServiceChild (\r
              ControllerHandle,\r
              This->DriverBindingHandle,\r
@@ -280,6 +302,17 @@ PxeBcDriverBindingStart (
   Private->Udp4CfgData.UseDefaultAddress  = FALSE;\r
 \r
   PxeBcInitSeedPacket (&Private->SeedPacket, Private->Udp4);\r
+  Private->MacLen = Private->SeedPacket.Dhcp4.Header.HwAddrLen;\r
+  CopyMem (&Private->Mac, &Private->SeedPacket.Dhcp4.Header.ClientHwAddr[0], Private->MacLen);\r
+\r
+\r
+  ZeroMem (&Private->Ip4ConfigData, sizeof (EFI_IP4_CONFIG_DATA));\r
+  Private->Ip4ConfigData.DefaultProtocol   = EFI_IP_PROTO_ICMP;\r
+  Private->Ip4ConfigData.AcceptIcmpErrors  = TRUE;\r
+  Private->Ip4ConfigData.TypeOfService     = DEFAULT_ToS;\r
+  Private->Ip4ConfigData.TimeToLive        = DEFAULT_TTL;\r
+  Private->Ip4ConfigData.DoNotFragment     = FALSE;\r
+  Private->Ip4ConfigData.RawData           = FALSE;\r
 \r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &ControllerHandle,\r
@@ -328,6 +361,22 @@ ON_ERROR:
       );\r
   }\r
 \r
+  if (Private->Ip4Child != NULL) {\r
+    gBS->CloseProtocol (\r
+          Private->Ip4Child,\r
+          &gEfiIp4ProtocolGuid,\r
+          This->DriverBindingHandle,\r
+          ControllerHandle\r
+          );\r
+\r
+    NetLibDestroyServiceChild (\r
+      ControllerHandle,\r
+      This->DriverBindingHandle,\r
+      &gEfiIp4ServiceBindingProtocolGuid,\r
+      Private->Ip4Child\r
+      );\r
+  }\r
+\r
   if (Private->Dhcp4Child != NULL) {\r
     gBS->CloseProtocol (\r
           Private->Dhcp4Child,\r