]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Driver.c
1. Sync the latest network stack. Add NetLibCreateIPv4DPathNode () in netlib library.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Tcp4Dxe / Tcp4Driver.c
index 002cd61089522776129dbe9b42dc43c5d0219d3d..1eefb38f915309e29b5ca723f56a0be26e9c425b 100644 (file)
@@ -143,7 +143,6 @@ Tcp4DestroyTimer (
   mTcp4Timer.TimerEvent = NULL;\r
 }\r
 \r
-//@MT: EFI_DRIVER_ENTRY_POINT (Tcp4DriverEntryPoint)\r
 \r
 EFI_STATUS\r
 EFIAPI\r
@@ -306,7 +305,7 @@ Tcp4DriverBindingStart (
   //\r
   NetZeroMem (&OpenData, sizeof (IP_IO_OPEN_DATA));\r
 \r
-  CopyMem (&OpenData.IpConfigData, &mIpIoDefaultIpConfigData, sizeof (EFI_IP4_CONFIG_DATA));\r
+  CopyMem (&OpenData.IpConfigData, &mIpIoDefaultIpConfigData, sizeof (OpenData.IpConfigData));\r
   OpenData.IpConfigData.DefaultProtocol = EFI_IP_PROTO_TCP;\r
 \r
   OpenData.PktRcvdNotify = Tcp4RxCallback;\r
@@ -587,6 +586,28 @@ Tcp4ServiceBindingCreateChild (
                   );\r
   if (EFI_ERROR (Status)) {\r
     SockDestroyChild (Sock);\r
+    goto ON_EXIT;\r
+  }\r
+\r
+  //\r
+  // Open the device path on the handle where service binding resides on.\r
+  //\r
+  Status = gBS->OpenProtocol (\r
+                  TcpServiceData->ControllerHandle,\r
+                  &gEfiDevicePathProtocolGuid,\r
+                  (VOID **) &Sock->ParentDevicePath,\r
+                  TcpServiceData->DriverBindingHandle,\r
+                  Sock->SockHandle,\r
+                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    gBS->CloseProtocol (\r
+           TcpServiceData->IpIo->ChildHandle,\r
+           &gEfiIp4ProtocolGuid,\r
+           TcpServiceData->DriverBindingHandle,\r
+           Sock->SockHandle\r
+           );\r
+    SockDestroyChild (Sock);\r
   }\r
 \r
 ON_EXIT:\r
@@ -653,6 +674,16 @@ Tcp4ServiceBindingDestroyChild (
 \r
   Status = SockDestroyChild (Sock);\r
 \r
+  //\r
+  // Close the device path protocol\r
+  //\r
+  gBS->CloseProtocol (\r
+         TcpServiceData->ControllerHandle,\r
+         &gEfiDevicePathProtocolGuid,\r
+         TcpServiceData->DriverBindingHandle,\r
+         ChildHandle\r
+         );\r
+\r
   //\r
   // Close the Ip4 protocol.\r
   //\r