]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/TcpDxe/TcpDispatcher.c
1. Add EFI_COMPONENT_NAME2_PROTOCOL.GetControllerName() support.
[mirror_edk2.git] / NetworkPkg / TcpDxe / TcpDispatcher.c
index 3e6d34c63f81873c4e3e2e126acd6c4f7a0d6f13..d3d2cb1c3a7d0359c9daef4d2589deccefd77ecd 100644 (file)
@@ -354,7 +354,16 @@ TcpAttachPcb (
   TCP_CB          *Tcb;\r
   TCP_PROTO_DATA  *ProtoData;\r
   IP_IO           *IpIo;\r
+  EFI_STATUS      Status;\r
+  VOID            *Ip;\r
+  EFI_GUID        *IpProtocolGuid;\r
 \r
+  if (Sk->IpVersion == IP_VERSION_4) {\r
+    IpProtocolGuid = &gEfiIp4ProtocolGuid;\r
+  } else {\r
+    IpProtocolGuid = &gEfiIp6ProtocolGuid;\r
+  }\r
+  \r
   Tcb = AllocateZeroPool (sizeof (TCP_CB));\r
 \r
   if (Tcb == NULL) {\r
@@ -377,6 +386,22 @@ TcpAttachPcb (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
+  //\r
+  // Open the new created IP instance BY_CHILD.\r
+  //\r
+  Status = gBS->OpenProtocol (\r
+                  Tcb->IpInfo->ChildHandle,\r
+                  IpProtocolGuid,\r
+                  &Ip,\r
+                  IpIo->Image,\r
+                  Sk->SockHandle,\r
+                  EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    IpIoRemoveIp (IpIo, Tcb->IpInfo);\r
+    return Status;\r
+  }\r
+  \r
   InitializeListHead (&Tcb->List);\r
   InitializeListHead (&Tcb->SndQue);\r
   InitializeListHead (&Tcb->RcvQue);\r
@@ -401,7 +426,14 @@ TcpDetachPcb (
 {\r
   TCP_PROTO_DATA   *ProtoData;\r
   TCP_CB           *Tcb;\r
+  EFI_GUID         *IpProtocolGuid;\r
 \r
+  if (Sk->IpVersion == IP_VERSION_4) {\r
+    IpProtocolGuid = &gEfiIp4ProtocolGuid;\r
+  } else {\r
+    IpProtocolGuid = &gEfiIp6ProtocolGuid;\r
+  }\r
+  \r
   ProtoData = (TCP_PROTO_DATA *) Sk->ProtoReserved;\r
   Tcb       = ProtoData->TcpPcb;\r
 \r
@@ -409,6 +441,16 @@ TcpDetachPcb (
 \r
   TcpFlushPcb (Tcb);\r
 \r
+  //\r
+  // Close the IP protocol.\r
+  //\r
+  gBS->CloseProtocol (\r
+         Tcb->IpInfo->ChildHandle,\r
+         IpProtocolGuid,\r
+         ProtoData->TcpService->IpIo->Image,\r
+         Sk->SockHandle\r
+         );\r
+  \r
   IpIoRemoveIp (ProtoData->TcpService->IpIo, Tcb->IpInfo);\r
 \r
   FreePool (Tcb);\r