#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
AccessPoint->UseDefaultAddress = Tcb->UseDefaultAddr;\r
\r
- NetCopyMem (&AccessPoint->StationAddress, &Tcb->LocalEnd.Ip, sizeof (EFI_IPv4_ADDRESS));\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
- NetCopyMem (&AccessPoint->RemoteAddress, &Tcb->RemoteEnd.Ip, sizeof (EFI_IPv4_ADDRESS));\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
\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->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
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
- NetCopyMem (&Tcb->LocalEnd.Ip, &CfgData->AccessPoint.StationAddress, sizeof (IP4_ADDR));\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
- NetCopyMem (&Tcb->RemoteEnd.Ip, &CfgData->AccessPoint.RemoteAddress, sizeof (IP4_ADDR));\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