/** @file\r
TCP output process routines.\r
\r
- Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
**/\r
UINT32\r
TcpRcvWinOld (\r
- IN TCP_CB *Tcb\r
+ IN TCP_CB *Tcb\r
)\r
{\r
UINT32 OldWin;\r
OldWin = 0;\r
\r
if (TCP_SEQ_GT (Tcb->RcvWl2 + Tcb->RcvWnd, Tcb->RcvNxt)) {\r
-\r
OldWin = TCP_SUB_SEQ (\r
- Tcb->RcvWl2 + Tcb->RcvWnd,\r
- Tcb->RcvNxt\r
- );\r
+ Tcb->RcvWl2 + Tcb->RcvWnd,\r
+ Tcb->RcvNxt\r
+ );\r
}\r
\r
return OldWin;\r
**/\r
UINT32\r
TcpRcvWinNow (\r
- IN TCP_CB *Tcb\r
+ IN TCP_CB *Tcb\r
)\r
{\r
SOCKET *Sk;\r
Sk = Tcb->Sk;\r
ASSERT (Sk != NULL);\r
\r
- OldWin = TcpRcvWinOld (Tcb);\r
+ OldWin = TcpRcvWinOld (Tcb);\r
\r
- Win = SockGetFreeSpace (Sk, SOCK_RCV_BUF);\r
+ Win = SockGetFreeSpace (Sk, SOCK_RCV_BUF);\r
\r
- Increase = 0;\r
+ Increase = 0;\r
if (Win > OldWin) {\r
Increase = Win - OldWin;\r
}\r
// half of the receive buffer.\r
//\r
if ((Increase > Tcb->SndMss) || (2 * Increase >= GET_RCV_BUFFSIZE (Sk))) {\r
-\r
return Win;\r
}\r
\r
**/\r
UINT16\r
TcpComputeWnd (\r
- IN OUT TCP_CB *Tcb,\r
- IN BOOLEAN Syn\r
+ IN OUT TCP_CB *Tcb,\r
+ IN BOOLEAN Syn\r
)\r
{\r
UINT32 Wnd;\r
// RFC requires that initial window not be scaled\r
//\r
if (Syn) {\r
-\r
Wnd = GET_RCV_BUFFSIZE (Tcb->Sk);\r
} else {\r
-\r
- Wnd = TcpRcvWinNow (Tcb);\r
+ Wnd = TcpRcvWinNow (Tcb);\r
\r
Tcb->RcvWnd = Wnd;\r
}\r
\r
Wnd = MIN (Wnd >> Tcb->RcvWndScale, 0xffff);\r
- return NTOHS ((UINT16) Wnd);\r
+ return NTOHS ((UINT16)Wnd);\r
}\r
\r
/**\r
**/\r
TCP_SEQNO\r
TcpGetMaxSndNxt (\r
- IN TCP_CB *Tcb\r
+ IN TCP_CB *Tcb\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- NET_BUF *Nbuf;\r
+ LIST_ENTRY *Entry;\r
+ NET_BUF *Nbuf;\r
\r
if (IsListEmpty (&Tcb->SndQue)) {\r
return Tcb->SndNxt;\r
**/\r
UINT32\r
TcpDataToSend (\r
- IN TCP_CB *Tcb,\r
- IN INTN Force\r
+ IN TCP_CB *Tcb,\r
+ IN INTN Force\r
)\r
{\r
SOCKET *Sk;\r
Limit = Tcb->SndWl2 + Tcb->SndWnd;\r
\r
if (TCP_SEQ_GT (Limit, Tcb->SndUna + Tcb->CWnd)) {\r
-\r
Limit = Tcb->SndUna + Tcb->CWnd;\r
}\r
\r
// buffer. The later can be non-zero if the peer shrinks\r
// its advertised window.\r
//\r
- Left = GET_SND_DATASIZE (Sk) + TCP_SUB_SEQ (TcpGetMaxSndNxt (Tcb), Tcb->SndNxt);\r
+ Left = GET_SND_DATASIZE (Sk) + TCP_SUB_SEQ (TcpGetMaxSndNxt (Tcb), Tcb->SndNxt);\r
\r
- Len = MIN (Win, Left);\r
+ Len = MIN (Win, Left);\r
\r
if (Len > Tcb->SndMss) {\r
Len = Tcb->SndMss;\r
}\r
\r
- if ((Force != 0)|| (Len == 0 && Left == 0)) {\r
+ if ((Force != 0) || ((Len == 0) && (Left == 0))) {\r
return Len;\r
}\r
\r
- if (Len == 0 && Left != 0) {\r
+ if ((Len == 0) && (Left != 0)) {\r
goto SetPersistTimer;\r
}\r
\r
// expecting an ACK, or the Nagle algorithm is disabled.\r
//\r
if ((Len == Tcb->SndMss) || (2 * Len >= Tcb->SndWndMax)) {\r
-\r
return Len;\r
}\r
\r
if ((Len == Left) &&\r
((Tcb->SndNxt == Tcb->SndUna) || TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_NAGLE))\r
- ) {\r
-\r
+ )\r
+ {\r
return Len;\r
}\r
\r
//\r
SetPersistTimer:\r
if (!TCP_TIMER_ON (Tcb->EnabledTimer, TCP_TIMER_REXMIT)) {\r
-\r
DEBUG (\r
- (EFI_D_WARN,\r
- "TcpDataToSend: enter persistent state for TCB %p\n",\r
- Tcb)\r
+ (DEBUG_WARN,\r
+ "TcpDataToSend: enter persistent state for TCB %p\n",\r
+ Tcb)\r
);\r
\r
if (!Tcb->ProbeTimerOn) {\r
**/\r
INTN\r
TcpTransmitSegment (\r
- IN OUT TCP_CB *Tcb,\r
- IN NET_BUF *Nbuf\r
+ IN OUT TCP_CB *Tcb,\r
+ IN NET_BUF *Nbuf\r
)\r
{\r
UINT16 Len;\r
ASSERT ((Nbuf != NULL) && (Nbuf->Tcp == NULL));\r
\r
if (TcpVerifySegment (Nbuf) == 0) {\r
- return -1; \r
+ return -1;\r
}\r
\r
DataLen = Nbuf->TotalSize;\r
\r
- Seg = TCPSEG_NETBUF (Nbuf);\r
- Syn = TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN);\r
+ Seg = TCPSEG_NETBUF (Nbuf);\r
+ Syn = TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN);\r
\r
if (Syn) {\r
-\r
Len = TcpSynBuildOption (Tcb, Nbuf);\r
} else {\r
-\r
Len = TcpBuildOption (Tcb, Nbuf);\r
}\r
\r
\r
Len += sizeof (TCP_HEAD);\r
\r
- Head = (TCP_HEAD *) NetbufAllocSpace (\r
- Nbuf,\r
- sizeof (TCP_HEAD),\r
- NET_BUF_HEAD\r
- );\r
+ Head = (TCP_HEAD *)NetbufAllocSpace (\r
+ Nbuf,\r
+ sizeof (TCP_HEAD),\r
+ NET_BUF_HEAD\r
+ );\r
\r
ASSERT (Head != NULL);\r
\r
- Nbuf->Tcp = Head;\r
+ Nbuf->Tcp = Head;\r
\r
- Head->SrcPort = Tcb->LocalEnd.Port;\r
- Head->DstPort = Tcb->RemoteEnd.Port;\r
- Head->Seq = NTOHL (Seg->Seq);\r
- Head->Ack = NTOHL (Tcb->RcvNxt);\r
- Head->HeadLen = (UINT8) (Len >> 2);\r
- Head->Res = 0;\r
- Head->Wnd = TcpComputeWnd (Tcb, Syn);\r
- Head->Checksum = 0;\r
+ Head->SrcPort = Tcb->LocalEnd.Port;\r
+ Head->DstPort = Tcb->RemoteEnd.Port;\r
+ Head->Seq = NTOHL (Seg->Seq);\r
+ Head->Ack = NTOHL (Tcb->RcvNxt);\r
+ Head->HeadLen = (UINT8)(Len >> 2);\r
+ Head->Res = 0;\r
+ Head->Wnd = TcpComputeWnd (Tcb, Syn);\r
+ Head->Checksum = 0;\r
\r
//\r
// Check whether to set the PSH flag.\r
if (DataLen != 0) {\r
if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_SND_PSH) &&\r
TCP_SEQ_BETWEEN (Seg->Seq, Tcb->SndPsh, Seg->End)\r
- ) {\r
-\r
+ )\r
+ {\r
TCP_SET_FLG (Seg->Flag, TCP_FLG_PSH);\r
TCP_CLEAR_FLG (Tcb->CtrlFlag, TCP_CTRL_SND_PSH);\r
-\r
} else if ((Seg->End == Tcb->SndNxt) && (GET_SND_DATASIZE (Tcb->Sk) == 0)) {\r
-\r
TCP_SET_FLG (Seg->Flag, TCP_FLG_PSH);\r
}\r
}\r
TCP_CLEAR_FLG (Seg->Flag, TCP_FLG_URG);\r
\r
if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_SND_URG) && TCP_SEQ_LEQ (Seg->Seq, Tcb->SndUp)) {\r
-\r
TCP_SET_FLG (Seg->Flag, TCP_FLG_URG);\r
\r
if (TCP_SEQ_LT (Tcb->SndUp, Seg->End)) {\r
-\r
- Seg->Urg = (UINT16) TCP_SUB_SEQ (Tcb->SndUp, Seg->Seq);\r
+ Seg->Urg = (UINT16)TCP_SUB_SEQ (Tcb->SndUp, Seg->Seq);\r
} else {\r
-\r
- Seg->Urg = (UINT16) MIN (\r
- TCP_SUB_SEQ (Tcb->SndUp,\r
- Seg->Seq),\r
- 0xffff\r
- );\r
+ Seg->Urg = (UINT16)MIN (\r
+ TCP_SUB_SEQ (\r
+ Tcb->SndUp,\r
+ Seg->Seq\r
+ ),\r
+ 0xffff\r
+ );\r
}\r
}\r
\r
- Head->Flag = Seg->Flag;\r
- Head->Urg = NTOHS (Seg->Urg);\r
- Head->Checksum = TcpChecksum (Nbuf, Tcb->HeadSum);\r
+ Head->Flag = Seg->Flag;\r
+ Head->Urg = NTOHS (Seg->Urg);\r
+ Head->Checksum = TcpChecksum (Nbuf, Tcb->HeadSum);\r
\r
//\r
// Update the TCP session's control information.\r
**/\r
NET_BUF *\r
TcpGetSegmentSndQue (\r
- IN TCP_CB *Tcb,\r
- IN TCP_SEQNO Seq,\r
- IN UINT32 Len\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq,\r
+ IN UINT32 Len\r
)\r
{\r
- LIST_ENTRY *Head;\r
- LIST_ENTRY *Cur;\r
- NET_BUF *Node;\r
- TCP_SEG *Seg;\r
- NET_BUF *Nbuf;\r
- TCP_SEQNO End;\r
- UINT8 *Data;\r
- UINT8 Flag;\r
- INT32 Offset;\r
- INT32 CopyLen;\r
+ LIST_ENTRY *Head;\r
+ LIST_ENTRY *Cur;\r
+ NET_BUF *Node;\r
+ TCP_SEG *Seg;\r
+ NET_BUF *Nbuf;\r
+ TCP_SEQNO End;\r
+ UINT8 *Data;\r
+ UINT8 Flag;\r
+ INT32 Offset;\r
+ INT32 CopyLen;\r
\r
ASSERT ((Tcb != NULL) && TCP_SEQ_LEQ (Seq, Tcb->SndNxt) && (Len > 0));\r
\r
//\r
// Find the segment that contains the Seq.\r
//\r
- Head = &Tcb->SndQue;\r
+ Head = &Tcb->SndQue;\r
\r
- Node = NULL;\r
- Seg = NULL;\r
+ Node = NULL;\r
+ Seg = NULL;\r
\r
NET_LIST_FOR_EACH (Cur, Head) {\r
- Node = NET_LIST_USER_STRUCT (Cur, NET_BUF, List);\r
- Seg = TCPSEG_NETBUF (Node);\r
+ Node = NET_LIST_USER_STRUCT (Cur, NET_BUF, List);\r
+ Seg = TCPSEG_NETBUF (Node);\r
\r
if (TCP_SEQ_LT (Seq, Seg->End) && TCP_SEQ_LEQ (Seg->Seq, Seq)) {\r
-\r
break;\r
}\r
}\r
if ((Seg->Seq == Seq) &&\r
TCP_SEQ_LEQ (Seg->End, Seg->Seq + Len) &&\r
!NET_BUF_SHARED (Node)\r
- ) {\r
-\r
+ )\r
+ {\r
NET_GET_REF (Node);\r
return Node;\r
}\r
\r
NetbufReserve (Nbuf, TCP_MAX_HEAD);\r
\r
- Flag = Seg->Flag;\r
- End = Seg->End;\r
+ Flag = Seg->Flag;\r
+ End = Seg->End;\r
\r
if (TCP_SEQ_LT (Seq + Len, Seg->End)) {\r
End = Seq + Len;\r
\r
//\r
// If SYN is set and out of the range, clear the flag.\r
- // Becuase the sequence of the first byte is SEG.SEQ+1,\r
+ // Because the sequence of the first byte is SEG.SEQ+1,\r
// adjust Offset by -1. If SYN is in the range, copy\r
// one byte less.\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN)) {\r
-\r
if (TCP_SEQ_LT (Seg->Seq, Seq)) {\r
-\r
TCP_CLEAR_FLG (Flag, TCP_FLG_SYN);\r
Offset--;\r
} else {\r
-\r
CopyLen--;\r
}\r
}\r
// and if it is out of the range, clear the flag.\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_FIN)) {\r
-\r
if (Seg->End == End) {\r
-\r
CopyLen--;\r
} else {\r
-\r
TCP_CLEAR_FLG (Flag, TCP_FLG_FIN);\r
}\r
}\r
Data = NetbufAllocSpace (Nbuf, CopyLen, NET_BUF_TAIL);\r
ASSERT (Data != NULL);\r
\r
- if ((INT32) NetbufCopy (Node, Offset, CopyLen, Data) != CopyLen) {\r
+ if ((INT32)NetbufCopy (Node, Offset, CopyLen, Data) != CopyLen) {\r
goto OnError;\r
}\r
}\r
\r
CopyMem (TCPSEG_NETBUF (Nbuf), Seg, sizeof (TCP_SEG));\r
\r
- TCPSEG_NETBUF (Nbuf)->Seq = Seq;\r
- TCPSEG_NETBUF (Nbuf)->End = End;\r
- TCPSEG_NETBUF (Nbuf)->Flag = Flag;\r
+ TCPSEG_NETBUF (Nbuf)->Seq = Seq;\r
+ TCPSEG_NETBUF (Nbuf)->End = End;\r
+ TCPSEG_NETBUF (Nbuf)->Flag = Flag;\r
\r
return Nbuf;\r
\r
**/\r
NET_BUF *\r
TcpGetSegmentSock (\r
- IN TCP_CB *Tcb,\r
- IN TCP_SEQNO Seq,\r
- IN UINT32 Len\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq,\r
+ IN UINT32 Len\r
)\r
{\r
- NET_BUF *Nbuf;\r
- UINT8 *Data;\r
- UINT32 DataGet;\r
+ NET_BUF *Nbuf;\r
+ UINT8 *Data;\r
+ UINT32 DataGet;\r
\r
ASSERT ((Tcb != NULL) && (Tcb->Sk != NULL));\r
\r
\r
if (Nbuf == NULL) {\r
DEBUG (\r
- (EFI_D_ERROR,\r
- "TcpGetSegmentSock: failed to allocate a netbuf for TCB %p\n",\r
- Tcb)\r
+ (DEBUG_ERROR,\r
+ "TcpGetSegmentSock: failed to allocate a netbuf for TCB %p\n",\r
+ Tcb)\r
);\r
\r
return NULL;\r
InsertTailList (&(Tcb->SndQue), &(Nbuf->List));\r
\r
if (DataGet != 0) {\r
-\r
SockDataSent (Tcb->Sk, DataGet);\r
}\r
\r
**/\r
NET_BUF *\r
TcpGetSegment (\r
- IN TCP_CB *Tcb,\r
- IN TCP_SEQNO Seq,\r
- IN UINT32 Len\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq,\r
+ IN UINT32 Len\r
)\r
{\r
- NET_BUF *Nbuf;\r
+ NET_BUF *Nbuf;\r
\r
ASSERT (Tcb != NULL);\r
\r
// Compare the SndNxt with the max sequence number sent.\r
//\r
if ((Len != 0) && TCP_SEQ_LT (Seq, TcpGetMaxSndNxt (Tcb))) {\r
-\r
Nbuf = TcpGetSegmentSndQue (Tcb, Seq, Len);\r
} else {\r
-\r
Nbuf = TcpGetSegmentSock (Tcb, Seq, Len);\r
}\r
\r
NetbufFree (Nbuf);\r
return NULL;\r
}\r
- \r
+\r
return Nbuf;\r
}\r
\r
**/\r
INTN\r
TcpRetransmit (\r
- IN TCP_CB *Tcb,\r
- IN TCP_SEQNO Seq\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Seq\r
)\r
{\r
- NET_BUF *Nbuf;\r
- UINT32 Len;\r
+ NET_BUF *Nbuf;\r
+ UINT32 Len;\r
\r
//\r
- // Compute the maxium length of retransmission. It is\r
+ // Compute the maximum length of retransmission. It is\r
// limited by three factors:\r
// 1. Less than SndMss\r
// 2. Must in the current send window\r
// as the original segment was in window when it was sent.\r
//\r
if ((Tcb->SndWndScale != 0) &&\r
- (TCP_SEQ_GT (Seq, Tcb->RetxmitSeqMax) || TCP_SEQ_BETWEEN (Tcb->SndWl2 + Tcb->SndWnd, Seq, Tcb->SndWl2 + Tcb->SndWnd + (1 << Tcb->SndWndScale)))) {\r
+ (TCP_SEQ_GT (Seq, Tcb->RetxmitSeqMax) || TCP_SEQ_BETWEEN (Tcb->SndWl2 + Tcb->SndWnd, Seq, Tcb->SndWl2 + Tcb->SndWnd + (1 << Tcb->SndWndScale))))\r
+ {\r
Len = TCP_SUB_SEQ (Tcb->SndNxt, Seq);\r
DEBUG (\r
- (EFI_D_WARN,\r
- "TcpRetransmit: retransmission without regard to the receiver window for TCB %p\n",\r
- Tcb)\r
+ (DEBUG_WARN,\r
+ "TcpRetransmit: retransmission without regard to the receiver window for TCB %p\n",\r
+ Tcb)\r
);\r
- \r
} else if (TCP_SEQ_GEQ (Tcb->SndWl2 + Tcb->SndWnd, Seq)) {\r
Len = TCP_SUB_SEQ (Tcb->SndWl2 + Tcb->SndWnd, Seq);\r
- \r
} else {\r
DEBUG (\r
- (EFI_D_WARN,\r
- "TcpRetransmit: retransmission cancelled because send window too small for TCB %p\n",\r
- Tcb)\r
+ (DEBUG_WARN,\r
+ "TcpRetransmit: retransmission cancelled because send window too small for TCB %p\n",\r
+ Tcb)\r
);\r
\r
return 0;\r
**/\r
INTN\r
TcpCheckSndQue (\r
- IN LIST_ENTRY *Head\r
+ IN LIST_ENTRY *Head\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- NET_BUF *Nbuf;\r
- TCP_SEQNO Seq;\r
+ LIST_ENTRY *Entry;\r
+ NET_BUF *Nbuf;\r
+ TCP_SEQNO Seq;\r
\r
if (IsListEmpty (Head)) {\r
return 1;\r
}\r
+\r
//\r
// Initialize the Seq.\r
//\r
**/\r
INTN\r
TcpToSendData (\r
- IN OUT TCP_CB *Tcb,\r
- IN INTN Force\r
+ IN OUT TCP_CB *Tcb,\r
+ IN INTN Force\r
)\r
{\r
- UINT32 Len;\r
- INTN Sent;\r
- UINT8 Flag;\r
- NET_BUF *Nbuf;\r
- TCP_SEG *Seg;\r
- TCP_SEQNO Seq;\r
- TCP_SEQNO End;\r
+ UINT32 Len;\r
+ INTN Sent;\r
+ UINT8 Flag;\r
+ NET_BUF *Nbuf;\r
+ TCP_SEG *Seg;\r
+ TCP_SEQNO Seq;\r
+ TCP_SEQNO End;\r
\r
ASSERT ((Tcb != NULL) && (Tcb->Sk != NULL) && (Tcb->State != TCP_LISTEN));\r
\r
Sent = 0;\r
\r
if ((Tcb->State == TCP_CLOSED) || TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_SENT)) {\r
-\r
return 0;\r
}\r
\r
//\r
// Compute how much data can be sent\r
//\r
- Len = TcpDataToSend (Tcb, Force);\r
- Seq = Tcb->SndNxt;\r
+ Len = TcpDataToSend (Tcb, Force);\r
+ Seq = Tcb->SndNxt;\r
\r
ASSERT ((Tcb->State) < (ARRAY_SIZE (mTcpOutFlag)));\r
- Flag = mTcpOutFlag[Tcb->State];\r
+ Flag = mTcpOutFlag[Tcb->State];\r
\r
if ((Flag & TCP_FLG_SYN) != 0) {\r
-\r
Seq = Tcb->Iss;\r
Len = 0;\r
}\r
\r
if (Nbuf == NULL) {\r
DEBUG (\r
- (EFI_D_ERROR,\r
- "TcpToSendData: failed to get a segment for TCB %p\n",\r
- Tcb)\r
+ (DEBUG_ERROR,\r
+ "TcpToSendData: failed to get a segment for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto OnError;\r
if ((TcpGetMaxSndNxt (Tcb) == Tcb->SndNxt) &&\r
(GET_SND_DATASIZE (Tcb->Sk) == 0) &&\r
TCP_SEQ_LT (End + 1, Tcb->SndWnd + Tcb->SndWl2)\r
- ) {\r
+ )\r
+ {\r
DEBUG (\r
- (EFI_D_NET,\r
- "TcpToSendData: send FIN to peer for TCB %p in state %s\n",\r
- Tcb,\r
- mTcpStateName[Tcb->State])\r
+ (DEBUG_NET,\r
+ "TcpToSendData: send FIN to peer for TCB %p in state %s\n",\r
+ Tcb,\r
+ mTcpStateName[Tcb->State])\r
);\r
\r
End++;\r
Seg->End = End;\r
Seg->Flag = Flag;\r
\r
- if (TcpVerifySegment (Nbuf) == 0 || TcpCheckSndQue (&Tcb->SndQue) == 0) {\r
+ if ((TcpVerifySegment (Nbuf) == 0) || (TcpCheckSndQue (&Tcb->SndQue) == 0)) {\r
DEBUG (\r
- (EFI_D_ERROR,\r
- "TcpToSendData: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ (DEBUG_ERROR,\r
+ "TcpToSendData: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
goto OnError;\r
}\r
//\r
if (Seg->End == Seg->Seq) {\r
DEBUG (\r
- (EFI_D_WARN,\r
- "TcpToSendData: created a empty segment for TCB %p, free it now\n",\r
- Tcb)\r
+ (DEBUG_WARN,\r
+ "TcpToSendData: created a empty segment for TCB %p, free it now\n",\r
+ Tcb)\r
);\r
\r
goto OnError;\r
NetbufTrim (Nbuf, (Nbuf->Tcp->HeadLen << 2), NET_BUF_HEAD);\r
Nbuf->Tcp = NULL;\r
\r
- if ((Flag & TCP_FLG_FIN) != 0) {\r
+ if ((Flag & TCP_FLG_FIN) != 0) {\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_FIN_SENT);\r
}\r
\r
// Karn's algorithm requires not to update RTT when in loss.\r
//\r
if ((Tcb->CongestState == TCP_CONGEST_OPEN) && !TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RTT_ON)) {\r
-\r
DEBUG (\r
- (EFI_D_NET,\r
- "TcpToSendData: set RTT measure sequence %d for TCB %p\n",\r
- Seq,\r
- Tcb)\r
+ (DEBUG_NET,\r
+ "TcpToSendData: set RTT measure sequence %d for TCB %p\n",\r
+ Seq,\r
+ Tcb)\r
);\r
\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_RTT_ON);\r
Tcb->RttSeq = Seq;\r
Tcb->RttMeasure = 0;\r
}\r
-\r
} while (Len == Tcb->SndMss);\r
\r
return Sent;\r
**/\r
VOID\r
TcpSendAck (\r
- IN OUT TCP_CB *Tcb\r
+ IN OUT TCP_CB *Tcb\r
)\r
{\r
- NET_BUF *Nbuf;\r
- TCP_SEG *Seg;\r
+ NET_BUF *Nbuf;\r
+ TCP_SEG *Seg;\r
\r
Nbuf = NetbufAlloc (TCP_MAX_HEAD);\r
\r
**/\r
INTN\r
TcpSendZeroProbe (\r
- IN OUT TCP_CB *Tcb\r
+ IN OUT TCP_CB *Tcb\r
)\r
{\r
- NET_BUF *Nbuf;\r
- TCP_SEG *Seg;\r
+ NET_BUF *Nbuf;\r
+ TCP_SEG *Seg;\r
INTN Result;\r
\r
Nbuf = NetbufAlloc (TCP_MAX_HEAD);\r
Seg->End = Tcb->SndNxt - 1;\r
Seg->Flag = TCP_FLG_ACK;\r
\r
- Result = TcpTransmitSegment (Tcb, Nbuf);\r
+ Result = TcpTransmitSegment (Tcb, Nbuf);\r
NetbufFree (Nbuf);\r
\r
return Result;\r
**/\r
VOID\r
TcpToSendAck (\r
- IN OUT TCP_CB *Tcb\r
+ IN OUT TCP_CB *Tcb\r
)\r
{\r
- UINT32 TcpNow;\r
+ UINT32 TcpNow;\r
\r
//\r
// Generally, TCP should send a delayed ACK unless:\r
}\r
\r
DEBUG (\r
- (EFI_D_NET,\r
- "TcpToSendAck: scheduled a delayed ACK for TCB %p\n",\r
- Tcb)\r
+ (DEBUG_NET,\r
+ "TcpToSendAck: scheduled a delayed ACK for TCB %p\n",\r
+ Tcb)\r
);\r
\r
//\r
return -1;\r
}\r
\r
- Nhead = (TCP_HEAD *) NetbufAllocSpace (\r
+ Nhead = (TCP_HEAD *)NetbufAllocSpace (\r
Nbuf,\r
sizeof (TCP_HEAD),\r
NET_BUF_TAIL\r
// is associated with it, otherwise derive from the Tcb.\r
//\r
if (Tcb == NULL) {\r
-\r
if (TCP_FLG_ON (Head->Flag, TCP_FLG_ACK)) {\r
- Nhead->Seq = Head->Ack;\r
- Nhead->Ack = 0;\r
+ Nhead->Seq = Head->Ack;\r
+ Nhead->Ack = 0;\r
} else {\r
Nhead->Seq = 0;\r
TCP_SET_FLG (Nhead->Flag, TCP_FLG_ACK);\r
Nhead->Ack = HTONL (NTOHL (Head->Seq) + Len);\r
}\r
} else {\r
-\r
- Nhead->Seq = HTONL (Tcb->SndNxt);\r
- Nhead->Ack = HTONL (Tcb->RcvNxt);\r
+ Nhead->Seq = HTONL (Tcb->SndNxt);\r
+ Nhead->Ack = HTONL (Tcb->RcvNxt);\r
TCP_SET_FLG (Nhead->Flag, TCP_FLG_ACK);\r
}\r
\r
Nhead->SrcPort = Head->DstPort;\r
Nhead->DstPort = Head->SrcPort;\r
- Nhead->HeadLen = (UINT8) (sizeof (TCP_HEAD) >> 2);\r
+ Nhead->HeadLen = (UINT8)(sizeof (TCP_HEAD) >> 2);\r
Nhead->Res = 0;\r
Nhead->Wnd = HTONS (0xFFFF);\r
Nhead->Checksum = 0;\r
**/\r
INTN\r
TcpVerifySegment (\r
- IN NET_BUF *Nbuf\r
+ IN NET_BUF *Nbuf\r
)\r
{\r
TCP_HEAD *Head;\r
\r
NET_CHECK_SIGNATURE (Nbuf, NET_BUF_SIGNATURE);\r
\r
- Seg = TCPSEG_NETBUF (Nbuf);\r
- Len = Nbuf->TotalSize;\r
- Head = Nbuf->Tcp;\r
+ Seg = TCPSEG_NETBUF (Nbuf);\r
+ Len = Nbuf->TotalSize;\r
+ Head = Nbuf->Tcp;\r
\r
if (Head != NULL) {\r
if (Head->Flag != Seg->Flag) {\r
\r
return 1;\r
}\r
-\r