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
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
{\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
\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