]> 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 2927849285568f1e5bc82ad2f2c72e170ba344ee..1eefb38f915309e29b5ca723f56a0be26e9c425b 100644 (file)
@@ -44,7 +44,7 @@ EFI_TCP4_PROTOCOL mTcp4ProtocolTemplate = {
 \r
 SOCK_INIT_DATA mTcp4DefaultSockData = {\r
   SOCK_STREAM,\r
-  0,\r
+  (SOCK_STATE) 0,\r
   NULL,\r
   TCP_BACKLOG,\r
   TCP_SND_BUF_SIZE,\r
@@ -143,7 +143,6 @@ Tcp4DestroyTimer (
   mTcp4Timer.TimerEvent = NULL;\r
 }\r
 \r
-//@MT: EFI_DRIVER_ENTRY_POINT (Tcp4DriverEntryPoint)\r
 \r
 EFI_STATUS\r
 EFIAPI\r
@@ -192,8 +191,8 @@ Returns:
   //\r
   Seed            = NetRandomInitSeed ();\r
   mTcpGlobalIss   = NET_RANDOM (Seed) % mTcpGlobalIss;\r
-  mTcp4RandomPort = TCP4_PORT_KNOWN +\r
-                    (UINT16) (NET_RANDOM(Seed) % TCP4_PORT_KNOWN);\r
+  mTcp4RandomPort = (UINT16) ( TCP4_PORT_KNOWN +\r
+                    (UINT16) (NET_RANDOM(Seed) % TCP4_PORT_KNOWN));\r
 \r
   return Status;\r
 }\r
@@ -306,7 +305,7 @@ Tcp4DriverBindingStart (
   //\r
   NetZeroMem (&OpenData, sizeof (IP_IO_OPEN_DATA));\r
 \r
-  OpenData.IpConfigData                 = mIpIoDefaultIpConfigData;\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