#define TCP_COMP_VAL(Min, Max, Default, Val) \\r
((((Val) <= (Max)) && ((Val) >= (Min))) ? (Val) : (Default))\r
\r
-STATIC\r
EFI_STATUS\r
Tcp4Route (\r
IN TCP_CB *Tcb,\r
instance hasn't been started.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
Tcp4GetMode (\r
IN TCP_CB *Tcb,\r
}\r
\r
if (Mode->Tcp4State) {\r
- *(Mode->Tcp4State) = Tcb->State;\r
+ *(Mode->Tcp4State) = (EFI_TCP4_CONNECTION_STATE) Tcb->State;\r
}\r
\r
if (Mode->Tcp4ConfigData) {\r
\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
Option->KeepAliveTime = Tcb->KeepAliveIdle / TCP_TICK_HZ;\r
Option->KeepAliveInterval = Tcb->KeepAlivePeriod / TCP_TICK_HZ;\r
\r
- Option->EnableNagle = !TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_NAGLE);\r
- Option->EnableTimeStamp = !TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_TS);\r
- Option->EnableWindowScaling = !TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_WS);\r
+ Option->EnableNagle = (BOOLEAN) (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_NAGLE));\r
+ Option->EnableTimeStamp = (BOOLEAN) (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_TS));\r
+ Option->EnableWindowScaling = (BOOLEAN) (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_WS));\r
\r
Option->EnableSelectiveAck = FALSE;\r
Option->EnablePathMtuDiscovery = FALSE;\r
@retval EFI_OUT_OF_RESOURCES No port can be allocated.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
Tcp4Bind (\r
IN EFI_TCP4_ACCESS_POINT *AP\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
@retval EFI_SUCCESS The operation is completed successfully.\r
\r
**/\r
-STATIC\r
VOID\r
Tcp4FlushPcb (\r
IN TCP_CB *Tcb\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
NetbufFreeList (&Tcb->RcvQue);\r
}\r
\r
-STATIC\r
EFI_STATUS\r
Tcp4AttachPcb (\r
IN SOCKET *Sk\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
return EFI_SUCCESS;\r
}\r
\r
-STATIC\r
VOID\r
Tcp4DetachPcb (\r
IN SOCKET *Sk\r
\r
IpIoRemoveIp (ProtoData->TcpService->IpIo, Tcb->IpInfo);\r
\r
- NetFreePool (Tcb);\r
+ gBS->FreePool (Tcb);\r
\r
ProtoData->TcpPcb = NULL;\r
}\r
@retval EFI_OUT_OF_RESOURCES Failed due to resource limit.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
Tcp4ConfigurePcb (\r
IN SOCKET *Sk,\r
IN EFI_TCP4_CONFIG_DATA *CfgData\r
)\r
{\r
- IP_IO *IpIo;\r
EFI_IP4_CONFIG_DATA IpCfgData;\r
EFI_STATUS Status;\r
EFI_TCP4_OPTION *Option;\r
\r
TcpProto = (TCP4_PROTO_DATA *) Sk->ProtoReserved;\r
Tcb = TcpProto->TcpPcb;\r
- IpIo = TcpProto->TcpService->IpIo;\r
\r
ASSERT (Tcb != NULL);\r
\r
//\r
// Add Ip for send pkt to the peer\r
//\r
- IpCfgData = mIpIoDefaultIpConfigData;\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
if (Option != NULL) {\r
SET_RCV_BUFFSIZE (\r
Sk,\r
- TCP_COMP_VAL (TCP_RCV_BUF_SIZE_MIN,\r
- TCP_RCV_BUF_SIZE,\r
- TCP_RCV_BUF_SIZE,\r
- Option->ReceiveBufferSize)\r
+ (UINT32) (TCP_COMP_VAL (\r
+ TCP_RCV_BUF_SIZE_MIN,\r
+ TCP_RCV_BUF_SIZE,\r
+ TCP_RCV_BUF_SIZE,\r
+ Option->ReceiveBufferSize\r
+ )\r
+ )\r
);\r
SET_SND_BUFFSIZE (\r
Sk,\r
- TCP_COMP_VAL (TCP_SND_BUF_SIZE_MIN,\r
- TCP_SND_BUF_SIZE,\r
- TCP_SND_BUF_SIZE,\r
- Option->SendBufferSize)\r
+ (UINT32) (TCP_COMP_VAL (\r
+ TCP_SND_BUF_SIZE_MIN,\r
+ TCP_SND_BUF_SIZE,\r
+ TCP_SND_BUF_SIZE,\r
+ Option->SendBufferSize\r
+ )\r
+ )\r
);\r
\r
SET_BACKLOG (\r
Sk,\r
- TCP_COMP_VAL (TCP_BACKLOG_MIN,\r
- TCP_BACKLOG,\r
- TCP_BACKLOG,\r
- Option->MaxSynBackLog)\r
+ (UINT32) (TCP_COMP_VAL (\r
+ TCP_BACKLOG_MIN,\r
+ TCP_BACKLOG,\r
+ TCP_BACKLOG,\r
+ Option->MaxSynBackLog\r
+ )\r
+ )\r
);\r
\r
Tcb->MaxRexmit = (UINT16) TCP_COMP_VAL (\r
TCP_FIN_WAIT2_TIME,\r
TCP_FIN_WAIT2_TIME_MAX,\r
TCP_FIN_WAIT2_TIME,\r
- Option->FinTimeout * TCP_TICK_HZ\r
+ (UINT32) (Option->FinTimeout * TCP_TICK_HZ)\r
);\r
\r
if (Option->TimeWaitTimeout != 0) {\r
TCP_TIME_WAIT_TIME,\r
TCP_TIME_WAIT_TIME_MAX,\r
TCP_TIME_WAIT_TIME,\r
- Option->TimeWaitTimeout * TCP_TICK_HZ\r
+ (UINT32) (Option->TimeWaitTimeout * TCP_TICK_HZ)\r
);\r
} else {\r
Tcb->TimeWaitTimeout = 0;\r
TCP_KEEPALIVE_IDLE_MIN,\r
TCP_KEEPALIVE_IDLE_MAX,\r
TCP_KEEPALIVE_IDLE_MIN,\r
- Option->KeepAliveTime * TCP_TICK_HZ\r
+ (UINT32) (Option->KeepAliveTime * TCP_TICK_HZ)\r
);\r
Tcb->KeepAlivePeriod = TCP_COMP_VAL (\r
TCP_KEEPALIVE_PERIOD_MIN,\r
TCP_KEEPALIVE_PERIOD,\r
TCP_KEEPALIVE_PERIOD,\r
- Option->KeepAliveInterval * TCP_TICK_HZ\r
+ (UINT32) (Option->KeepAliveInterval * TCP_TICK_HZ)\r
);\r
}\r
\r
TCP_CONNECT_TIME_MIN,\r
TCP_CONNECT_TIME,\r
TCP_CONNECT_TIME,\r
- Option->ConnectionTimeout * TCP_TICK_HZ\r
+ (UINT32) (Option->ConnectionTimeout * TCP_TICK_HZ)\r
);\r
\r
if (Option->EnableNagle == FALSE) {\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