\r
AccessPoint->UseDefaultAddress = Tcb->UseDefaultAddr;\r
\r
- EFI_IP4 (AccessPoint->StationAddress) = Tcb->LocalEnd.Ip;\r
+ CopyMem (&AccessPoint->StationAddress, &Tcb->LocalEnd.Ip, sizeof (EFI_IPv4_ADDRESS));\r
AccessPoint->SubnetMask = Tcb->SubnetMask;\r
AccessPoint->StationPort = NTOHS (Tcb->LocalEnd.Port);\r
\r
- EFI_IP4 (AccessPoint->RemoteAddress) = Tcb->RemoteEnd.Ip;\r
+ CopyMem (&AccessPoint->RemoteAddress, &Tcb->RemoteEnd.Ip, sizeof (EFI_IPv4_ADDRESS));\r
AccessPoint->RemotePort = NTOHS (Tcb->RemoteEnd.Port);\r
AccessPoint->ActiveFlag = (BOOLEAN) (Tcb->State != TCP_LISTEN);\r
\r
if (mTcp4RandomPort <= TCP4_PORT_KNOWN) {\r
\r
if (Cycle) {\r
- TCP4_DEBUG_ERROR (("Tcp4Bind: no port can be allocated "\r
+ DEBUG ((EFI_D_ERROR, "Tcp4Bind: no port can be allocated "\r
"for this pcb\n"));\r
\r
return EFI_OUT_OF_RESOURCES;\r
TcpProto = (TCP4_PROTO_DATA *) Sock->ProtoReserved;\r
\r
if (SOCK_IS_CONFIGURED (Sock)) {\r
- NetListRemoveEntry (&Tcb->List);\r
+ RemoveEntryList (&Tcb->List);\r
+\r
+ //\r
+ // Uninstall the device path protocl.\r
+ //\r
+ gBS->UninstallProtocolInterface (\r
+ Sock->SockHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ Sock->DevicePath\r
+ );\r
+ gBS->FreePool (Sock->DevicePath);\r
\r
TcpSetVariableData (TcpProto->TcpService);\r
}\r
TCP4_PROTO_DATA *ProtoData;\r
IP_IO *IpIo;\r
\r
- Tcb = NetAllocateZeroPool (sizeof (TCP_CB));\r
+ Tcb = AllocateZeroPool (sizeof (TCP_CB));\r
\r
if (Tcb == NULL) {\r
\r
- TCP4_DEBUG_ERROR (("Tcp4ConfigurePcb: failed to allocate a TCB\n"));\r
+ DEBUG ((EFI_D_ERROR, "Tcp4ConfigurePcb: failed to allocate a TCB\n"));\r
\r
return EFI_OUT_OF_RESOURCES;\r
}\r
Tcb->IpInfo = IpIoAddIp (IpIo);\r
if (Tcb->IpInfo == NULL) {\r
\r
- NetFreePool (Tcb);\r
+ gBS->FreePool (Tcb);\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- NetListInit (&Tcb->List);\r
- NetListInit (&Tcb->SndQue);\r
- NetListInit (&Tcb->RcvQue);\r
+ InitializeListHead (&Tcb->List);\r
+ InitializeListHead (&Tcb->SndQue);\r
+ InitializeListHead (&Tcb->RcvQue);\r
\r
Tcb->State = TCP_CLOSED;\r
Tcb->Sk = Sk;\r
\r
IpIoRemoveIp (ProtoData->TcpService->IpIo, Tcb->IpInfo);\r
\r
- NetFreePool (Tcb);\r
+ gBS->FreePool (Tcb);\r
\r
ProtoData->TcpPcb = NULL;\r
}\r
//\r
// Add Ip for send pkt to the peer\r
//\r
- CopyMem (&IpCfgData, &mIpIoDefaultIpConfigData, sizeof (EFI_IP4_CONFIG_DATA));\r
+ CopyMem (&IpCfgData, &mIpIoDefaultIpConfigData, sizeof (IpCfgData));\r
IpCfgData.DefaultProtocol = EFI_IP_PROTO_TCP;\r
IpCfgData.UseDefaultAddress = CfgData->AccessPoint.UseDefaultAddress;\r
IpCfgData.StationAddress = CfgData->AccessPoint.StationAddress;\r
Status = Tcp4Bind (&(CfgData->AccessPoint));\r
\r
if (EFI_ERROR (Status)) {\r
- TCP4_DEBUG_ERROR (("Tcp4ConfigurePcb: Bind endpoint failed "\r
+ DEBUG ((EFI_D_ERROR, "Tcp4ConfigurePcb: Bind endpoint failed "\r
"with %r\n", Status));\r
\r
goto OnExit;\r
// Initalize the operating information in this Tcb\r
//\r
ASSERT (Tcb->State == TCP_CLOSED &&\r
- NetListIsEmpty (&Tcb->SndQue) &&\r
- NetListIsEmpty (&Tcb->RcvQue));\r
+ IsListEmpty (&Tcb->SndQue) &&\r
+ IsListEmpty (&Tcb->RcvQue));\r
\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_NO_KEEPALIVE);\r
Tcb->State = TCP_CLOSED;\r
Tcb->TTL = CfgData->TimeToLive;\r
Tcb->TOS = CfgData->TypeOfService;\r
\r
- Tcb->LocalEnd.Ip = EFI_IP4 (CfgData->AccessPoint.StationAddress);\r
+ Tcb->UseDefaultAddr = CfgData->AccessPoint.UseDefaultAddress;\r
+\r
+ CopyMem (&Tcb->LocalEnd.Ip, &CfgData->AccessPoint.StationAddress, sizeof (IP4_ADDR));\r
Tcb->LocalEnd.Port = HTONS (CfgData->AccessPoint.StationPort);\r
Tcb->SubnetMask = CfgData->AccessPoint.SubnetMask;\r
\r
- Tcb->RemoteEnd.Ip = EFI_IP4 (CfgData->AccessPoint.RemoteAddress);\r
- Tcb->RemoteEnd.Port = HTONS (CfgData->AccessPoint.RemotePort);\r
+ if (CfgData->AccessPoint.ActiveFlag) {\r
+ CopyMem (&Tcb->RemoteEnd.Ip, &CfgData->AccessPoint.RemoteAddress, sizeof (IP4_ADDR));\r
+ Tcb->RemoteEnd.Port = HTONS (CfgData->AccessPoint.RemotePort);\r
+ } else {\r
+ Tcb->RemoteEnd.Ip = 0;\r
+ Tcb->RemoteEnd.Port = 0;\r
+ }\r
\r
Option = CfgData->ControlOption;\r
\r
}\r
}\r
\r
+ //\r
+ // The socket is bound, the <SrcIp, SrcPort, DstIp, DstPort> is\r
+ // determined, construct the IP device path and install it.\r
+ //\r
+ Status = TcpInstallDevicePath (Sk);\r
+ if (EFI_ERROR (Status)) {\r
+ goto OnExit;\r
+ }\r
+\r
//\r
// update state of Tcb and socket\r
//\r
\r
return Tcp4Route (Tcb, (TCP4_ROUTE_INFO *) Data);\r
\r
+ default:\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
return EFI_SUCCESS;\r