]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/DnsDxe/DnsDhcp.c
OvmfPkg/QemuVideoDxe: list "VbeShim.h" in the INF file
[mirror_edk2.git] / NetworkPkg / DnsDxe / DnsDhcp.c
index 6b409ba5e3cc6ec545c1b35cdb4c779da7fb34c6..951477b78c9e7a6199b1074b31674e9ae35b6460 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
 Functions implementation related with DHCPv4/v6 for DNS driver.\r
 \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -14,152 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "DnsImpl.h"\r
 \r
-/**\r
-  The callback function for the timer event used to get map.\r
-\r
-  @param[in] Event    The event this function is registered to.\r
-  @param[in] Context  The context registered to the event.\r
-**/\r
-VOID\r
-EFIAPI\r
-TimeoutToGetMap (\r
-  IN EFI_EVENT      Event,\r
-  IN VOID           *Context\r
-  )\r
-{\r
-  *((BOOLEAN *) Context) = TRUE;\r
-  return ;\r
-}\r
-\r
-/**\r
-  Create an IP child, use it to start the auto configuration, then destroy it.\r
-\r
-  @param[in] Controller       The controller which has the service installed.\r
-  @param[in] Image            The image handle used to open service.\r
-\r
-  @retval EFI_SUCCESS         The configuration is done.\r
-  @retval Others              Other errors as indicated.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-DnsStartIp4(\r
-  IN  EFI_HANDLE            Controller,\r
-  IN  EFI_HANDLE            Image\r
-  )\r
-{\r
-  EFI_IP4_PROTOCOL              *Ip4;\r
-  EFI_HANDLE                    Ip4Handle;\r
-  EFI_EVENT                     TimerToGetMap;\r
-  EFI_IP4_CONFIG_DATA           Ip4ConfigData;\r
-  EFI_IP4_MODE_DATA             Ip4Mode;\r
-  EFI_STATUS                    Status;\r
-\r
-  BOOLEAN                       Timeout;\r
-\r
-  //\r
-  // Get the Ip4ServiceBinding Protocol\r
-  //\r
-  Ip4Handle     = NULL;\r
-  Ip4           = NULL;\r
-  TimerToGetMap = NULL;\r
-  \r
-  Timeout      = FALSE;\r
-\r
-  Status = NetLibCreateServiceChild (\r
-             Controller,\r
-             Image,\r
-             &gEfiIp4ServiceBindingProtocolGuid,\r
-             &Ip4Handle\r
-             );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                 Ip4Handle,\r
-                 &gEfiIp4ProtocolGuid,\r
-                 (VOID **) &Ip4,\r
-                 Controller,\r
-                 Image,\r
-                 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                 );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_EXIT;\r
-  }\r
-\r
-  Ip4ConfigData.DefaultProtocol          = EFI_IP_PROTO_ICMP;\r
-  Ip4ConfigData.AcceptAnyProtocol        = FALSE;\r
-  Ip4ConfigData.AcceptIcmpErrors         = FALSE;\r
-  Ip4ConfigData.AcceptBroadcast          = FALSE;\r
-  Ip4ConfigData.AcceptPromiscuous        = FALSE;\r
-  Ip4ConfigData.UseDefaultAddress        = TRUE;\r
-  ZeroMem (&Ip4ConfigData.StationAddress, sizeof (EFI_IPv4_ADDRESS));\r
-  ZeroMem (&Ip4ConfigData.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
-  Ip4ConfigData.TypeOfService            = 0;\r
-  Ip4ConfigData.TimeToLive               = 1;\r
-  Ip4ConfigData.DoNotFragment            = FALSE;\r
-  Ip4ConfigData.RawData                  = FALSE;\r
-  Ip4ConfigData.ReceiveTimeout           = 0;\r
-  Ip4ConfigData.TransmitTimeout          = 0;\r
-\r
-  Status = Ip4->Configure (Ip4, &Ip4ConfigData);\r
-\r
-  if (Status == EFI_NO_MAPPING) {\r
-    Status  = gBS->CreateEvent (\r
-                    EVT_NOTIFY_SIGNAL | EVT_TIMER,\r
-                    TPL_CALLBACK,\r
-                    TimeoutToGetMap,\r
-                    &Timeout,\r
-                    &TimerToGetMap\r
-                    );\r
-    \r
-    if (EFI_ERROR (Status)) {\r
-      goto ON_EXIT;\r
-    }\r
-    \r
-    Status = gBS->SetTimer (\r
-                   TimerToGetMap,\r
-                   TimerRelative,\r
-                   MultU64x32 (10000000, 5)\r
-                   );\r
-    \r
-    if (EFI_ERROR (Status)) {\r
-      goto ON_EXIT;\r
-    }\r
-    \r
-    while (!Timeout) {\r
-      Ip4->Poll (Ip4);\r
-  \r
-      if (!EFI_ERROR (Ip4->GetModeData (Ip4, &Ip4Mode, NULL, NULL)) && \r
-          Ip4Mode.IsConfigured) {       \r
-        break;\r
-      }\r
-    }\r
-\r
-    if (Timeout) {\r
-      Status = EFI_DEVICE_ERROR;\r
-    }\r
-  }\r
-  \r
-ON_EXIT: \r
-\r
-  if (TimerToGetMap != NULL) {\r
-    gBS->SetTimer (TimerToGetMap, TimerCancel, 0);\r
-    gBS->CloseEvent (TimerToGetMap);\r
-  }\r
-\r
-  NetLibDestroyServiceChild (\r
-    Controller,\r
-    Image,\r
-    &gEfiIp4ServiceBindingProtocolGuid,\r
-    Ip4Handle\r
-    );\r
-  \r
-  return Status;\r
-}\r
-\r
 /**\r
   This function initialize the DHCP4 message instance.\r
 \r
@@ -415,7 +269,7 @@ GetDns4ServerFromDhcp4 (
   EFI_STATUS                          Status;\r
   EFI_HANDLE                          Image;\r
   EFI_HANDLE                          Controller;\r
-  BOOLEAN                             MediaPresent;\r
+  EFI_STATUS                          MediaStatus;\r
   EFI_HANDLE                          MnpChildHandle;  \r
   EFI_MANAGED_NETWORK_PROTOCOL        *Mnp;\r
   EFI_MANAGED_NETWORK_CONFIG_DATA     MnpConfigData;\r
@@ -462,22 +316,12 @@ GetDns4ServerFromDhcp4 (
   //\r
   // Check media.\r
   //\r
-  MediaPresent = TRUE;\r
-  NetLibDetectMedia (Controller, &MediaPresent);\r
-  if (!MediaPresent) {\r
+  MediaStatus = EFI_SUCCESS;\r
+  NetLibDetectMediaWaitTimeout (Controller, DNS_CHECK_MEDIA_GET_DHCP_WAITING_TIME, &MediaStatus);\r
+  if (MediaStatus != EFI_SUCCESS) {\r
     return EFI_NO_MEDIA;\r
   }\r
 \r
-  //\r
-  // Start the auto configuration if UseDefaultSetting.\r
-  //\r
-  if (Instance->Dns4CfgData.UseDefaultSetting) {\r
-    Status = DnsStartIp4 (Controller, Image);\r
-    if (EFI_ERROR(Status)) {\r
-      return Status;\r
-    }\r
-  }\r
-  \r
   //\r
   // Create a Mnp child instance, get the protocol and config for it.\r
   //\r
@@ -618,7 +462,7 @@ GetDns4ServerFromDhcp4 (
   \r
   ParaList[0]->OpCode  = DHCP4_TAG_TYPE;\r
   ParaList[0]->Length  = 1;\r
-  ParaList[0]->Data[0] = DHCP4_MSG_INFORM;\r
+  ParaList[0]->Data[0] = DHCP4_MSG_REQUEST;\r
   \r
   ParaList[1] = AllocateZeroPool (sizeof (EFI_DHCP4_PACKET_OPTION));\r
   if (ParaList[1] == NULL) {\r
@@ -776,7 +620,7 @@ GetDns6ServerFromDhcp6 (
   EFI_DHCP6_PACKET_OPTION   *Oro;\r
   EFI_DHCP6_RETRANSMISSION  InfoReqReXmit;\r
   EFI_EVENT                 Timer;\r
-  BOOLEAN                   MediaPresent;\r
+  EFI_STATUS                MediaStatus;\r
   DNS6_SERVER_INFOR         DnsServerInfor;\r
 \r
   Dhcp6Handle = NULL;\r
@@ -791,9 +635,9 @@ GetDns6ServerFromDhcp6 (
   //\r
   // Check media status before doing DHCP.\r
   //\r
-  MediaPresent = TRUE;\r
-  NetLibDetectMedia (Controller, &MediaPresent);\r
-  if (!MediaPresent) {\r
+  MediaStatus = EFI_SUCCESS;\r
+  NetLibDetectMediaWaitTimeout (Controller, DNS_CHECK_MEDIA_GET_DHCP_WAITING_TIME, &MediaStatus);\r
+  if (MediaStatus != EFI_SUCCESS) {\r
     return EFI_NO_MEDIA;\r
   }\r
 \r