**/\r
INTN\r
TcpSeqAcceptable (\r
- IN TCP_CB *Tcb,\r
- IN TCP_SEG *Seg\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEG *Seg\r
)\r
{\r
return (TCP_SEQ_LEQ (Tcb->RcvNxt, Seg->End) &&\r
**/\r
VOID\r
TcpFastRecover (\r
- IN OUT TCP_CB *Tcb,\r
- IN TCP_SEG *Seg\r
+ IN OUT TCP_CB *Tcb,\r
+ IN TCP_SEG *Seg\r
)\r
{\r
UINT32 FlightSize;\r
// Step 1: Three duplicate ACKs and not in fast recovery\r
//\r
if (Tcb->CongestState != TCP_CONGEST_RECOVER) {\r
-\r
//\r
// Step 1A: Invoking fast retransmission.\r
//\r
- FlightSize = TCP_SUB_SEQ (Tcb->SndNxt, Tcb->SndUna);\r
+ FlightSize = TCP_SUB_SEQ (Tcb->SndNxt, Tcb->SndUna);\r
\r
- Tcb->Ssthresh = MAX (FlightSize >> 1, (UINT32) (2 * Tcb->SndMss));\r
- Tcb->Recover = Tcb->SndNxt;\r
+ Tcb->Ssthresh = MAX (FlightSize >> 1, (UINT32)(2 * Tcb->SndMss));\r
+ Tcb->Recover = Tcb->SndNxt;\r
\r
Tcb->CongestState = TCP_CONGEST_RECOVER;\r
TCP_CLEAR_FLG (Tcb->CtrlFlag, TCP_CTRL_RTT_ON);\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpFastRecover: enter fast retransmission for TCB %p, recover point is %d\n",\r
- Tcb,\r
- Tcb->Recover)\r
+ "TcpFastRecover: enter fast retransmission for TCB %p, recover point is %d\n",\r
+ Tcb,\r
+ Tcb->Recover)\r
);\r
return;\r
}\r
// During fast recovery, execute Step 3, 4, 5 of RFC3782\r
//\r
if (Seg->Ack == Tcb->SndUna) {\r
-\r
//\r
// Step 3: Fast Recovery,\r
// If this is a duplicated ACK, increse Cwnd by SMSS.\r
Tcb->CWnd += Tcb->SndMss;\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpFastRecover: received another duplicated ACK (%d) for TCB %p\n",\r
- Seg->Ack,\r
- Tcb)\r
+ "TcpFastRecover: received another duplicated ACK (%d) for TCB %p\n",\r
+ Seg->Ack,\r
+ Tcb)\r
);\r
-\r
} else {\r
-\r
//\r
// New data is ACKed, check whether it is a\r
// full ACK or partial ACK\r
//\r
if (TCP_SEQ_GEQ (Seg->Ack, Tcb->Recover)) {\r
-\r
//\r
// Step 5 - Full ACK:\r
// deflate the congestion window, and exit fast recovery\r
//\r
- FlightSize = TCP_SUB_SEQ (Tcb->SndNxt, Tcb->SndUna);\r
+ FlightSize = TCP_SUB_SEQ (Tcb->SndNxt, Tcb->SndUna);\r
\r
- Tcb->CWnd = MIN (Tcb->Ssthresh, FlightSize + Tcb->SndMss);\r
+ Tcb->CWnd = MIN (Tcb->Ssthresh, FlightSize + Tcb->SndMss);\r
\r
Tcb->CongestState = TCP_CONGEST_OPEN;\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpFastRecover: received a full ACK(%d) for TCB %p, exit fast recovery\n",\r
- Seg->Ack,\r
- Tcb)\r
+ "TcpFastRecover: received a full ACK(%d) for TCB %p, exit fast recovery\n",\r
+ Seg->Ack,\r
+ Tcb)\r
);\r
-\r
} else {\r
-\r
//\r
// Step 5 - Partial ACK:\r
// fast retransmit the first unacknowledge field\r
//\r
if (Acked >= Tcb->SndMss) {\r
Acked -= Tcb->SndMss;\r
-\r
}\r
\r
Tcb->CWnd -= Acked;\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpFastRecover: received a partial ACK(%d) for TCB %p\n",\r
- Seg->Ack,\r
- Tcb)\r
+ "TcpFastRecover: received a partial ACK(%d) for TCB %p\n",\r
+ Seg->Ack,\r
+ Tcb)\r
);\r
-\r
}\r
}\r
}\r
**/\r
VOID\r
TcpFastLossRecover (\r
- IN OUT TCP_CB *Tcb,\r
- IN TCP_SEG *Seg\r
+ IN OUT TCP_CB *Tcb,\r
+ IN TCP_SEG *Seg\r
)\r
{\r
if (TCP_SEQ_GT (Seg->Ack, Tcb->SndUna)) {\r
-\r
//\r
// New data is ACKed, check whether it is a\r
// full ACK or partial ACK\r
//\r
if (TCP_SEQ_GEQ (Seg->Ack, Tcb->LossRecover)) {\r
-\r
//\r
// Full ACK: exit the loss recovery.\r
//\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpFastLossRecover: received a full ACK(%d) for TCB %p\n",\r
- Seg->Ack,\r
- Tcb)\r
+ "TcpFastLossRecover: received a full ACK(%d) for TCB %p\n",\r
+ Seg->Ack,\r
+ Tcb)\r
);\r
-\r
} else {\r
-\r
//\r
// Partial ACK:\r
// fast retransmit the first unacknowledge field.\r
TcpRetransmit (Tcb, Seg->Ack);\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpFastLossRecover: received a partial ACK(%d) for TCB %p\n",\r
- Seg->Ack,\r
- Tcb)\r
+ "TcpFastLossRecover: received a partial ACK(%d) for TCB %p\n",\r
+ Seg->Ack,\r
+ Tcb)\r
);\r
}\r
}\r
**/\r
VOID\r
TcpComputeRtt (\r
- IN OUT TCP_CB *Tcb,\r
- IN UINT32 Measure\r
+ IN OUT TCP_CB *Tcb,\r
+ IN UINT32 Measure\r
)\r
{\r
- INT32 Var;\r
+ INT32 Var;\r
\r
//\r
// Step 2.3: Compute the RTO for subsequent RTT measurement.\r
//\r
if (Tcb->SRtt != 0) {\r
-\r
Var = Tcb->SRtt - (Measure << TCP_RTT_SHIFT);\r
\r
if (Var < 0) {\r
\r
Tcb->RttVar = (3 * Tcb->RttVar + Var) >> 2;\r
Tcb->SRtt = 7 * (Tcb->SRtt >> 3) + Measure;\r
-\r
} else {\r
//\r
// Step 2.2: compute the first RTT measure\r
//\r
if (Tcb->Rto < TCP_RTO_MIN) {\r
Tcb->Rto = TCP_RTO_MIN;\r
-\r
} else if (Tcb->Rto > TCP_RTO_MAX) {\r
Tcb->Rto = TCP_RTO_MAX;\r
-\r
}\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpComputeRtt: new RTT for TCB %p computed SRTT: %d RTTVAR: %d RTO: %d\n",\r
- Tcb,\r
- Tcb->SRtt,\r
- Tcb->RttVar,\r
- Tcb->Rto)\r
+ "TcpComputeRtt: new RTT for TCB %p computed SRTT: %d RTTVAR: %d RTO: %d\n",\r
+ Tcb,\r
+ Tcb->SRtt,\r
+ Tcb->RttVar,\r
+ Tcb->Rto)\r
);\r
-\r
}\r
\r
/**\r
**/\r
INTN\r
TcpTrimSegment (\r
- IN NET_BUF *Nbuf,\r
- IN TCP_SEQNO Left,\r
- IN TCP_SEQNO Right\r
+ IN NET_BUF *Nbuf,\r
+ IN TCP_SEQNO Left,\r
+ IN TCP_SEQNO Right\r
)\r
{\r
- TCP_SEG *Seg;\r
- TCP_SEQNO Urg;\r
- UINT32 Drop;\r
+ TCP_SEG *Seg;\r
+ TCP_SEQNO Urg;\r
+ UINT32 Drop;\r
\r
Seg = TCPSEG_NETBUF (Nbuf);\r
\r
// truncate every thing, include SYN and FIN.\r
//\r
if (TCP_SEQ_LEQ (Seg->End, Left) || TCP_SEQ_LEQ (Right, Seg->Seq)) {\r
-\r
TCP_CLEAR_FLG (Seg->Flag, TCP_FLG_SYN);\r
TCP_CLEAR_FLG (Seg->Flag, TCP_FLG_FIN);\r
\r
// Adjust the buffer header\r
//\r
if (TCP_SEQ_LT (Seg->Seq, Left)) {\r
-\r
- Drop = TCP_SUB_SEQ (Left, Seg->Seq);\r
- Urg = Seg->Seq + Seg->Urg;\r
- Seg->Seq = Left;\r
+ Drop = TCP_SUB_SEQ (Left, Seg->Seq);\r
+ Urg = Seg->Seq + Seg->Urg;\r
+ Seg->Seq = Left;\r
\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN)) {\r
TCP_CLEAR_FLG (Seg->Flag, TCP_FLG_SYN);\r
// Adjust the urgent point\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_URG)) {\r
-\r
if (TCP_SEQ_LT (Urg, Seg->Seq)) {\r
-\r
TCP_CLEAR_FLG (Seg->Flag, TCP_FLG_URG);\r
} else {\r
- Seg->Urg = (UINT16) TCP_SUB_SEQ (Urg, Seg->Seq);\r
+ Seg->Urg = (UINT16)TCP_SUB_SEQ (Urg, Seg->Seq);\r
}\r
}\r
\r
// Adjust the buffer tail\r
//\r
if (TCP_SEQ_GT (Seg->End, Right)) {\r
-\r
- Drop = TCP_SUB_SEQ (Seg->End, Right);\r
- Seg->End = Right;\r
+ Drop = TCP_SUB_SEQ (Seg->End, Right);\r
+ Seg->End = Right;\r
\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_FIN)) {\r
TCP_CLEAR_FLG (Seg->Flag, TCP_FLG_FIN);\r
**/\r
INTN\r
TcpTrimInWnd (\r
- IN TCP_CB *Tcb,\r
- IN NET_BUF *Nbuf\r
+ IN TCP_CB *Tcb,\r
+ IN NET_BUF *Nbuf\r
)\r
{\r
return TcpTrimSegment (Nbuf, Tcb->RcvNxt, Tcb->RcvWl2 + Tcb->RcvWnd);\r
**/\r
INTN\r
TcpDeliverData (\r
- IN OUT TCP_CB *Tcb\r
+ IN OUT TCP_CB *Tcb\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- NET_BUF *Nbuf;\r
- TCP_SEQNO Seq;\r
- TCP_SEG *Seg;\r
- UINT32 Urgent;\r
+ LIST_ENTRY *Entry;\r
+ NET_BUF *Nbuf;\r
+ TCP_SEQNO Seq;\r
+ TCP_SEG *Seg;\r
+ UINT32 Urgent;\r
\r
ASSERT ((Tcb != NULL) && (Tcb->Sk != NULL));\r
\r
// and TCP is in a proper state\r
//\r
if (IsListEmpty (&Tcb->RcvQue) || !TCP_CONNECTED (Tcb->State)) {\r
-\r
return 0;\r
}\r
\r
Seq = Tcb->RcvNxt;\r
\r
while (Entry != &Tcb->RcvQue) {\r
- Nbuf = NET_LIST_USER_STRUCT (Entry, NET_BUF, List);\r
- Seg = TCPSEG_NETBUF (Nbuf);\r
+ Nbuf = NET_LIST_USER_STRUCT (Entry, NET_BUF, List);\r
+ Seg = TCPSEG_NETBUF (Nbuf);\r
\r
if (TcpVerifySegment (Nbuf) == 0) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpToSendData: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ "TcpToSendData: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
NetbufFree (Nbuf);\r
return -1;\r
// RFC793 Eighth step: process FIN in sequence\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_FIN)) {\r
-\r
//\r
// The peer sends to us junky data after FIN,\r
// reset the connection.\r
if (!IsListEmpty (&Tcb->RcvQue)) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpDeliverData: data received after FIN from peer of TCB %p, reset connection\n",\r
- Tcb)\r
+ "TcpDeliverData: data received after FIN from peer of TCB %p, reset connection\n",\r
+ Tcb)\r
);\r
\r
NetbufFree (Nbuf);\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpDeliverData: processing FIN from peer of TCB %p\n",\r
- Tcb)\r
+ "TcpDeliverData: processing FIN from peer of TCB %p\n",\r
+ Tcb)\r
);\r
\r
switch (Tcb->State) {\r
- case TCP_SYN_RCVD:\r
- case TCP_ESTABLISHED:\r
+ case TCP_SYN_RCVD:\r
+ case TCP_ESTABLISHED:\r
\r
- TcpSetState (Tcb, TCP_CLOSE_WAIT);\r
- break;\r
-\r
- case TCP_FIN_WAIT_1:\r
-\r
- if (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
-\r
- TcpSetState (Tcb, TCP_CLOSING);\r
+ TcpSetState (Tcb, TCP_CLOSE_WAIT);\r
break;\r
- }\r
\r
- //\r
- // fall through\r
- //\r
- case TCP_FIN_WAIT_2:\r
+ case TCP_FIN_WAIT_1:\r
\r
- TcpSetState (Tcb, TCP_TIME_WAIT);\r
- TcpClearAllTimer (Tcb);\r
+ if (!TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
+ TcpSetState (Tcb, TCP_CLOSING);\r
+ break;\r
+ }\r
\r
- if (Tcb->TimeWaitTimeout != 0) {\r
+ //\r
+ // fall through\r
+ //\r
+ case TCP_FIN_WAIT_2:\r
\r
- TcpSetTimer (Tcb, TCP_TIMER_2MSL, Tcb->TimeWaitTimeout);\r
- } else {\r
+ TcpSetState (Tcb, TCP_TIME_WAIT);\r
+ TcpClearAllTimer (Tcb);\r
\r
- DEBUG (\r
- (DEBUG_WARN,\r
- "Connection closed immediately because app disables TIME_WAIT timer for %p\n",\r
- Tcb)\r
- );\r
+ if (Tcb->TimeWaitTimeout != 0) {\r
+ TcpSetTimer (Tcb, TCP_TIMER_2MSL, Tcb->TimeWaitTimeout);\r
+ } else {\r
+ DEBUG (\r
+ (DEBUG_WARN,\r
+ "Connection closed immediately because app disables TIME_WAIT timer for %p\n",\r
+ Tcb)\r
+ );\r
\r
- TcpSendAck (Tcb);\r
- TcpClose (Tcb);\r
- }\r
- break;\r
+ TcpSendAck (Tcb);\r
+ TcpClose (Tcb);\r
+ }\r
\r
- case TCP_CLOSE_WAIT:\r
- case TCP_CLOSING:\r
- case TCP_LAST_ACK:\r
- case TCP_TIME_WAIT:\r
- //\r
- // The peer sends to us junk FIN byte. Discard\r
- // the buffer then reset the connection\r
- //\r
- NetbufFree (Nbuf);\r
- return -1;\r
- break;\r
- default:\r
- break;\r
+ break;\r
+\r
+ case TCP_CLOSE_WAIT:\r
+ case TCP_CLOSING:\r
+ case TCP_LAST_ACK:\r
+ case TCP_TIME_WAIT:\r
+ //\r
+ // The peer sends to us junk FIN byte. Discard\r
+ // the buffer then reset the connection\r
+ //\r
+ NetbufFree (Nbuf);\r
+ return -1;\r
+ break;\r
+ default:\r
+ break;\r
}\r
\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_ACK_NOW);\r
// Don't delay the ack if PUSH flag is on.\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_PSH)) {\r
-\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_ACK_NOW);\r
}\r
\r
if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_URG) &&\r
TCP_SEQ_LEQ (Seg->Seq, Tcb->RcvUp))\r
{\r
-\r
if (TCP_SEQ_LEQ (Seg->End, Tcb->RcvUp)) {\r
Urgent = Nbuf->TotalSize;\r
} else {\r
}\r
\r
if (TCP_FIN_RCVD (Tcb->State)) {\r
-\r
SockNoMoreData (Tcb->Sk);\r
}\r
\r
**/\r
INTN\r
TcpQueueData (\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
- TCP_SEG *Seg;\r
- LIST_ENTRY *Head;\r
- LIST_ENTRY *Prev;\r
- LIST_ENTRY *Cur;\r
- NET_BUF *Node;\r
+ TCP_SEG *Seg;\r
+ LIST_ENTRY *Head;\r
+ LIST_ENTRY *Prev;\r
+ LIST_ENTRY *Cur;\r
+ NET_BUF *Node;\r
\r
ASSERT ((Tcb != NULL) && (Nbuf != NULL) && (Nbuf->Tcp == NULL));\r
\r
NET_GET_REF (Nbuf);\r
\r
- Seg = TCPSEG_NETBUF (Nbuf);\r
- Head = &Tcb->RcvQue;\r
+ Seg = TCPSEG_NETBUF (Nbuf);\r
+ Head = &Tcb->RcvQue;\r
\r
//\r
// Fast path to process normal case. That is,\r
// no out-of-order segments are received.\r
//\r
if (IsListEmpty (Head)) {\r
-\r
InsertTailList (Head, &Nbuf->List);\r
return 1;\r
}\r
//\r
for (Prev = Head, Cur = Head->ForwardLink;\r
Cur != Head;\r
- Prev = Cur, Cur = Cur->ForwardLink) {\r
-\r
+ Prev = Cur, Cur = Cur->ForwardLink)\r
+ {\r
Node = NET_LIST_USER_STRUCT (Cur, NET_BUF, List);\r
\r
if (TCP_SEQ_LT (Seg->Seq, TCPSEG_NETBUF (Node)->Seq)) {\r
Node = NET_LIST_USER_STRUCT (Prev, NET_BUF, List);\r
\r
if (TCP_SEQ_LT (Seg->Seq, TCPSEG_NETBUF (Node)->End)) {\r
-\r
if (TCP_SEQ_LEQ (Seg->End, TCPSEG_NETBUF (Node)->End)) {\r
return 1;\r
}\r
Node = NET_LIST_USER_STRUCT (Cur, NET_BUF, List);\r
\r
if (TCP_SEQ_LEQ (TCPSEG_NETBUF (Node)->End, Seg->End)) {\r
-\r
Cur = Cur->ForwardLink;\r
\r
RemoveEntryList (&Node->List);\r
}\r
\r
if (TCP_SEQ_LT (TCPSEG_NETBUF (Node)->Seq, Seg->End)) {\r
-\r
if (TCP_SEQ_LEQ (TCPSEG_NETBUF (Node)->Seq, Seg->Seq)) {\r
-\r
RemoveEntryList (&Nbuf->List);\r
return 1;\r
}\r
RemoveEntryList (&Nbuf->List);\r
return 0;\r
}\r
+\r
break;\r
}\r
\r
return 1;\r
}\r
\r
-\r
/**\r
Adjust the send queue or the retransmit queue.\r
\r
**/\r
INTN\r
TcpAdjustSndQue (\r
- IN TCP_CB *Tcb,\r
- IN TCP_SEQNO Ack\r
+ IN TCP_CB *Tcb,\r
+ IN TCP_SEQNO Ack\r
)\r
{\r
- LIST_ENTRY *Head;\r
- LIST_ENTRY *Cur;\r
- NET_BUF *Node;\r
- TCP_SEG *Seg;\r
+ LIST_ENTRY *Head;\r
+ LIST_ENTRY *Cur;\r
+ NET_BUF *Node;\r
+ TCP_SEG *Seg;\r
\r
- Head = &Tcb->SndQue;\r
- Cur = Head->ForwardLink;\r
+ Head = &Tcb->SndQue;\r
+ Cur = Head->ForwardLink;\r
\r
while (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_GEQ (Seg->Seq, Ack)) {\r
break;\r
\r
NET_CHECK_SIGNATURE (Nbuf, NET_BUF_SIGNATURE);\r
\r
- Parent = NULL;\r
- Tcb = NULL;\r
+ Parent = NULL;\r
+ Tcb = NULL;\r
\r
- Head = (TCP_HEAD *) NetbufGetByte (Nbuf, 0, NULL);\r
+ Head = (TCP_HEAD *)NetbufGetByte (Nbuf, 0, NULL);\r
ASSERT (Head != NULL);\r
\r
if (Nbuf->TotalSize < sizeof (TCP_HEAD)) {\r
goto DISCARD;\r
}\r
\r
- Len = Nbuf->TotalSize - (Head->HeadLen << 2);\r
+ Len = Nbuf->TotalSize - (Head->HeadLen << 2);\r
\r
if ((Head->HeadLen < 5) || (Len < 0)) {\r
-\r
DEBUG ((DEBUG_NET, "TcpInput: received a malformed packet\n"));\r
\r
goto DISCARD;\r
Head->SrcPort,\r
Src,\r
Version,\r
- (BOOLEAN) TCP_FLG_ON (Head->Flag, TCP_FLG_SYN)\r
+ (BOOLEAN)TCP_FLG_ON (Head->Flag, TCP_FLG_SYN)\r
);\r
\r
if ((Tcb == NULL) || (Tcb->State == TCP_CLOSED)) {\r
if (TcpParseOption (Nbuf->Tcp, &Option) == -1) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: reset the peer because of malformed option for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: reset the peer because of malformed option for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto SEND_RESET;\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_RST)) {\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: discard a reset segment for TCB %p in listening\n",\r
- Tcb)\r
+ "TcpInput: discard a reset segment for TCB %p in listening\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_ACK)) {\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: send reset because of segment with ACK for TCB %p in listening\n",\r
- Tcb)\r
+ "TcpInput: send reset because of segment with ACK for TCB %p in listening\n",\r
+ Tcb)\r
);\r
\r
goto SEND_RESET;\r
//\r
// create a child TCB to handle the data\r
//\r
- Parent = Tcb;\r
+ Parent = Tcb;\r
\r
- Tcb = TcpCloneTcb (Parent);\r
+ Tcb = TcpCloneTcb (Parent);\r
if (Tcb == NULL) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: discard a segment because failed to clone a child for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard a segment because failed to clone a child for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpInput: create a child for TCB %p in listening\n",\r
- Tcb)\r
+ "TcpInput: create a child for TCB %p in listening\n",\r
+ Tcb)\r
);\r
\r
//\r
if (TcpTrimInWnd (Tcb, Nbuf) == 0) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
}\r
\r
goto DISCARD;\r
-\r
} else if (Tcb->State == TCP_SYN_SENT) {\r
//\r
// First step: Check ACK bit\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_ACK) && (Seg->Ack != Tcb->Iss + 1)) {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: send reset because of wrong ACK received for TCB %p in SYN_SENT\n",\r
- Tcb)\r
+ "TcpInput: send reset because of wrong ACK received for TCB %p in SYN_SENT\n",\r
+ Tcb)\r
);\r
\r
goto SEND_RESET;\r
// Second step: Check RST bit\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_RST)) {\r
-\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_ACK)) {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: connection reset by peer for TCB %p in SYN_SENT\n",\r
- Tcb)\r
+ "TcpInput: connection reset by peer for TCB %p in SYN_SENT\n",\r
+ Tcb)\r
);\r
\r
SOCK_ERROR (Tcb->Sk, EFI_CONNECTION_RESET);\r
goto DROP_CONNECTION;\r
} else {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: discard a reset segment because of no ACK for TCB %p in SYN_SENT\n",\r
- Tcb)\r
+ "TcpInput: discard a reset segment because of no ACK for TCB %p in SYN_SENT\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
// Fourth step: Check SYN. Pay attention to simultaneous open\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN)) {\r
-\r
TcpInitTcbPeer (Tcb, Seg, &Option);\r
\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_ACK)) {\r
-\r
Tcb->SndUna = Seg->Ack;\r
}\r
\r
TcpClearTimer (Tcb, TCP_TIMER_REXMIT);\r
\r
if (TCP_SEQ_GT (Tcb->SndUna, Tcb->Iss)) {\r
-\r
TcpSetState (Tcb, TCP_ESTABLISHED);\r
\r
TcpClearTimer (Tcb, TCP_TIMER_CONNECT);\r
if ((Tcb->CongestState == TCP_CONGEST_OPEN) &&\r
TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RTT_ON))\r
{\r
-\r
TcpComputeRtt (Tcb, Tcb->RttMeasure);\r
TCP_CLEAR_FLG (Tcb->CtrlFlag, TCP_CTRL_RTT_ON);\r
}\r
if (TcpTrimInWnd (Tcb, Nbuf) == 0) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpInput: connection established for TCB %p in SYN_SENT\n",\r
- Tcb)\r
+ "TcpInput: connection established for TCB %p in SYN_SENT\n",\r
+ Tcb)\r
);\r
\r
goto StepSix;\r
\r
ASSERT (Tcb->SndNxt == Tcb->Iss + 1);\r
\r
- if (TcpAdjustSndQue (Tcb, Tcb->SndNxt) == 0 || TcpTrimInWnd (Tcb, Nbuf) == 0) {\r
+ if ((TcpAdjustSndQue (Tcb, Tcb->SndNxt) == 0) || (TcpTrimInWnd (Tcb, Nbuf) == 0)) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: simultaneous open for TCB %p in SYN_SENT\n",\r
- Tcb)\r
+ "TcpInput: simultaneous open for TCB %p in SYN_SENT\n",\r
+ Tcb)\r
);\r
\r
goto StepSix;\r
if (TcpSeqAcceptable (Tcb, Seg) == 0) {\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: sequence acceptance test failed for segment of TCB %p\n",\r
- Tcb)\r
+ "TcpInput: sequence acceptance test failed for segment of TCB %p\n",\r
+ Tcb)\r
);\r
\r
if (!TCP_FLG_ON (Seg->Flag, TCP_FLG_RST)) {\r
(Tcb->RcvWl2 == Seg->End) &&\r
!TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN | TCP_FLG_FIN))\r
{\r
-\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_ACK_NOW);\r
}\r
\r
// Second step: Check the RST\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_RST)) {\r
-\r
DEBUG ((DEBUG_WARN, "TcpInput: connection reset for TCB %p\n", Tcb));\r
\r
if (Tcb->State == TCP_SYN_RCVD) {\r
-\r
SOCK_ERROR (Tcb->Sk, EFI_CONNECTION_REFUSED);\r
\r
//\r
(Tcb->State == TCP_FIN_WAIT_2) ||\r
(Tcb->State == TCP_CLOSE_WAIT))\r
{\r
-\r
SOCK_ERROR (Tcb->Sk, EFI_CONNECTION_RESET);\r
-\r
} else {\r
}\r
\r
if (TcpTrimInWnd (Tcb, Nbuf) == 0) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
// Fourth step: Check the SYN bit.\r
//\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN)) {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: connection reset because received extra SYN for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: connection reset because received extra SYN for TCB %p\n",\r
+ Tcb)\r
);\r
\r
SOCK_ERROR (Tcb->Sk, EFI_CONNECTION_RESET);\r
goto RESET_THEN_DROP;\r
}\r
+\r
//\r
// Fifth step: Check the ACK\r
//\r
if (!TCP_FLG_ON (Seg->Flag, TCP_FLG_ACK)) {\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: segment discard because of no ACK for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: segment discard because of no ACK for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
} else {\r
- if (Tcb->IpInfo->IpVersion == IP_VERSION_6 && Tcb->Tick == 0) {\r
+ if ((Tcb->IpInfo->IpVersion == IP_VERSION_6) && (Tcb->Tick == 0)) {\r
Tcp6RefreshNeighbor (Tcb, Src, TCP6_KEEP_NEIGHBOR_TIME * TICKS_PER_SECOND);\r
Tcb->Tick = TCP6_REFRESH_NEIGHBOR_TICK;\r
}\r
}\r
\r
if (Tcb->State == TCP_SYN_RCVD) {\r
-\r
if (TCP_SEQ_LT (Tcb->SndUna, Seg->Ack) &&\r
TCP_SEQ_LEQ (Seg->Ack, Tcb->SndNxt))\r
{\r
-\r
- Tcb->SndWnd = Seg->Wnd;\r
- Tcb->SndWndMax = MAX (Tcb->SndWnd, Tcb->SndWndMax);\r
- Tcb->SndWl1 = Seg->Seq;\r
- Tcb->SndWl2 = Seg->Ack;\r
+ Tcb->SndWnd = Seg->Wnd;\r
+ Tcb->SndWndMax = MAX (Tcb->SndWnd, Tcb->SndWndMax);\r
+ Tcb->SndWl1 = Seg->Seq;\r
+ Tcb->SndWl2 = Seg->Ack;\r
TcpSetState (Tcb, TCP_ESTABLISHED);\r
\r
TcpClearTimer (Tcb, TCP_TIMER_CONNECT);\r
\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpInput: connection established for TCB %p in SYN_RCVD\n",\r
- Tcb)\r
+ "TcpInput: connection established for TCB %p in SYN_RCVD\n",\r
+ Tcb)\r
);\r
\r
//\r
} else {\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: send reset because of wrong ACK for TCB %p in SYN_RCVD\n",\r
- Tcb)\r
+ "TcpInput: send reset because of wrong ACK for TCB %p in SYN_RCVD\n",\r
+ Tcb)\r
);\r
\r
goto SEND_RESET;\r
}\r
\r
if (TCP_SEQ_LT (Seg->Ack, Tcb->SndUna)) {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: ignore the out-of-data ACK for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: ignore the out-of-data ACK for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto StepSix;\r
-\r
} else if (TCP_SEQ_GT (Seg->Ack, Tcb->SndNxt)) {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: discard segment for future ACK for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard segment for future ACK for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
TcpSendAck (Tcb);\r
if (TCP_SEQ_LEQ (Seg->Seq, Tcb->RcvWl2) &&\r
TCP_SEQ_LT (Tcb->RcvWl2, Seg->End))\r
{\r
-\r
- Tcb->TsRecent = Option.TSVal;\r
- Tcb->TsRecentAge = mTcpTick;\r
+ Tcb->TsRecent = Option.TSVal;\r
+ Tcb->TsRecentAge = mTcpTick;\r
}\r
\r
TcpComputeRtt (Tcb, TCP_SUB_TIME (mTcpTick, Option.TSEcr));\r
-\r
} else if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RTT_ON)) {\r
-\r
ASSERT (Tcb->CongestState == TCP_CONGEST_OPEN);\r
\r
TcpComputeRtt (Tcb, Tcb->RttMeasure);\r
}\r
\r
if (Seg->Ack == Tcb->SndNxt) {\r
-\r
TcpClearTimer (Tcb, TCP_TIMER_REXMIT);\r
} else {\r
-\r
TcpSetTimer (Tcb, TCP_TIMER_REXMIT, Tcb->Rto);\r
}\r
\r
(Seg->Wnd == Tcb->SndWnd) &&\r
(0 == Len))\r
{\r
-\r
Tcb->DupAck++;\r
} else {\r
-\r
Tcb->DupAck = 0;\r
}\r
\r
if (((Tcb->CongestState == TCP_CONGEST_OPEN) && (Tcb->DupAck < 3)) ||\r
(Tcb->CongestState == TCP_CONGEST_LOSS))\r
{\r
-\r
if (TCP_SEQ_GT (Seg->Ack, Tcb->SndUna)) {\r
-\r
if (Tcb->CWnd < Tcb->Ssthresh) {\r
-\r
Tcb->CWnd += Tcb->SndMss;\r
} else {\r
-\r
Tcb->CWnd += MAX (Tcb->SndMss * Tcb->SndMss / Tcb->CWnd, 1);\r
}\r
\r
TcpFastLossRecover (Tcb, Seg);\r
}\r
} else {\r
-\r
TcpFastRecover (Tcb, Seg);\r
}\r
\r
if (TCP_SEQ_GT (Seg->Ack, Tcb->SndUna)) {\r
-\r
if (TcpAdjustSndQue (Tcb, Seg->Ack) == 0) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_SND_URG) &&\r
TCP_SEQ_LT (Tcb->SndUp, Seg->Ack))\r
{\r
-\r
TCP_CLEAR_FLG (Tcb->CtrlFlag, TCP_CTRL_SND_URG);\r
}\r
}\r
if (TCP_SEQ_LT (Tcb->SndWl1, Seg->Seq) ||\r
((Tcb->SndWl1 == Seg->Seq) && TCP_SEQ_LEQ (Tcb->SndWl2, Seg->Ack)))\r
{\r
-\r
Right = Seg->Ack + Seg->Wnd;\r
\r
if (TCP_SEQ_LT (Right, Tcb->SndWl2 + Tcb->SndWnd)) {\r
-\r
if ((Tcb->SndWl1 == Seg->Seq) &&\r
(Tcb->SndWl2 == Seg->Ack) &&\r
(Len == 0))\r
{\r
-\r
goto NO_UPDATE;\r
}\r
\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: peer shrinks the window for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: peer shrinks the window for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
if ((Tcb->CongestState == TCP_CONGEST_RECOVER) &&\r
(TCP_SEQ_LT (Right, Tcb->Recover)))\r
{\r
-\r
Tcb->Recover = Right;\r
}\r
\r
if ((Tcb->CongestState == TCP_CONGEST_LOSS) &&\r
(TCP_SEQ_LT (Right, Tcb->LossRecover)))\r
{\r
-\r
Tcb->LossRecover = Right;\r
}\r
\r
//\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: peer advise negative useable window for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: peer advise negative useable window for connected TCB %p\n",\r
+ Tcb)\r
);\r
Usable = TCP_SUB_SEQ (Tcb->SndNxt, Right);\r
if ((Usable >> Tcb->SndWndScale) > 0) {\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: SndNxt is out of window by more than window scale for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: SndNxt is out of window by more than window scale for TCB %p\n",\r
+ Tcb)\r
);\r
Tcb->SndNxt = Right;\r
}\r
- if (Right == Tcb->SndUna) {\r
\r
+ if (Right == Tcb->SndUna) {\r
TcpClearTimer (Tcb, TCP_TIMER_REXMIT);\r
TcpSetProbeTimer (Tcb);\r
}\r
}\r
}\r
\r
- Tcb->SndWnd = Seg->Wnd;\r
- Tcb->SndWndMax = MAX (Tcb->SndWnd, Tcb->SndWndMax);\r
- Tcb->SndWl1 = Seg->Seq;\r
- Tcb->SndWl2 = Seg->Ack;\r
+ Tcb->SndWnd = Seg->Wnd;\r
+ Tcb->SndWndMax = MAX (Tcb->SndWnd, Tcb->SndWndMax);\r
+ Tcb->SndWl1 = Seg->Seq;\r
+ Tcb->SndWl2 = Seg->Ack;\r
}\r
\r
NO_UPDATE:\r
if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_SENT) &&\r
(Tcb->SndUna == Tcb->SndNxt))\r
{\r
-\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpInput: local FIN is ACKed by peer for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: local FIN is ACKed by peer for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED);\r
// Transit the state if proper.\r
//\r
switch (Tcb->State) {\r
- case TCP_FIN_WAIT_1:\r
+ case TCP_FIN_WAIT_1:\r
\r
- if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
+ if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
+ TcpSetState (Tcb, TCP_FIN_WAIT_2);\r
\r
- TcpSetState (Tcb, TCP_FIN_WAIT_2);\r
+ TcpClearAllTimer (Tcb);\r
+ TcpSetTimer (Tcb, TCP_TIMER_FINWAIT2, Tcb->FinWait2Timeout);\r
+ }\r
\r
- TcpClearAllTimer (Tcb);\r
- TcpSetTimer (Tcb, TCP_TIMER_FINWAIT2, Tcb->FinWait2Timeout);\r
- }\r
+ case TCP_FIN_WAIT_2:\r
\r
- case TCP_FIN_WAIT_2:\r
+ break;\r
\r
- break;\r
+ case TCP_CLOSE_WAIT:\r
+ break;\r
\r
- case TCP_CLOSE_WAIT:\r
- break;\r
+ case TCP_CLOSING:\r
\r
- case TCP_CLOSING:\r
+ if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
+ TcpSetState (Tcb, TCP_TIME_WAIT);\r
+\r
+ TcpClearAllTimer (Tcb);\r
\r
- if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
+ if (Tcb->TimeWaitTimeout != 0) {\r
+ TcpSetTimer (Tcb, TCP_TIMER_2MSL, Tcb->TimeWaitTimeout);\r
+ } else {\r
+ DEBUG (\r
+ (DEBUG_WARN,\r
+ "Connection closed immediately because app disables TIME_WAIT timer for %p\n",\r
+ Tcb)\r
+ );\r
\r
- TcpSetState (Tcb, TCP_TIME_WAIT);\r
+ TcpClose (Tcb);\r
+ }\r
+ }\r
\r
- TcpClearAllTimer (Tcb);\r
+ break;\r
\r
- if (Tcb->TimeWaitTimeout != 0) {\r
+ case TCP_LAST_ACK:\r
\r
+ if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
+ TcpSetState (Tcb, TCP_CLOSED);\r
+ }\r
+\r
+ break;\r
+\r
+ case TCP_TIME_WAIT:\r
+\r
+ TcpSendAck (Tcb);\r
+\r
+ if (Tcb->TimeWaitTimeout != 0) {\r
TcpSetTimer (Tcb, TCP_TIMER_2MSL, Tcb->TimeWaitTimeout);\r
} else {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "Connection closed immediately because app disables TIME_WAIT timer for %p\n",\r
- Tcb)\r
+ "Connection closed immediately because app disables TIME_WAIT timer for %p\n",\r
+ Tcb)\r
);\r
\r
TcpClose (Tcb);\r
}\r
- }\r
- break;\r
-\r
- case TCP_LAST_ACK:\r
-\r
- if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_ACKED)) {\r
-\r
- TcpSetState (Tcb, TCP_CLOSED);\r
- }\r
-\r
- break;\r
-\r
- case TCP_TIME_WAIT:\r
-\r
- TcpSendAck (Tcb);\r
-\r
- if (Tcb->TimeWaitTimeout != 0) {\r
-\r
- TcpSetTimer (Tcb, TCP_TIMER_2MSL, Tcb->TimeWaitTimeout);\r
- } else {\r
-\r
- DEBUG (\r
- (DEBUG_WARN,\r
- "Connection closed immediately because app disables TIME_WAIT timer for %p\n",\r
- Tcb)\r
- );\r
\r
- TcpClose (Tcb);\r
- }\r
- break;\r
+ break;\r
\r
- default:\r
- break;\r
+ default:\r
+ break;\r
}\r
+\r
//\r
// Sixth step: Check the URG bit.update the Urg point\r
// if in TCP_CAN_RECV, otherwise, leave the RcvUp intact.\r
TcpSetKeepaliveTimer (Tcb);\r
\r
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_URG) && !TCP_FIN_RCVD (Tcb->State)) {\r
-\r
DEBUG (\r
(DEBUG_NET,\r
- "TcpInput: received urgent data from peer for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: received urgent data from peer for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
Urg = Seg->Seq + Seg->Urg;\r
if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RCVD_URG) &&\r
TCP_SEQ_GT (Urg, Tcb->RcvUp))\r
{\r
-\r
Tcb->RcvUp = Urg;\r
} else {\r
-\r
Tcb->RcvUp = Urg;\r
TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_RCVD_URG);\r
}\r
}\r
+\r
//\r
// Seventh step: Process the segment data\r
//\r
if (Seg->End != Seg->Seq) {\r
-\r
if (TCP_FIN_RCVD (Tcb->State)) {\r
-\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: connection reset because data is lost for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: connection reset because data is lost for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto RESET_THEN_DROP;\r
if (TCP_LOCAL_CLOSED (Tcb->State) && (Nbuf->TotalSize != 0)) {\r
DEBUG (\r
(DEBUG_WARN,\r
- "TcpInput: connection reset because data is lost for connected TCB %p\n",\r
- Tcb)\r
+ "TcpInput: connection reset because data is lost for connected TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto RESET_THEN_DROP;\r
if (TcpQueueData (Tcb, Nbuf) == 0) {\r
DEBUG (\r
(DEBUG_ERROR,\r
- "TcpInput: discard a broken segment for TCB %p\n",\r
- Tcb)\r
+ "TcpInput: discard a broken segment for TCB %p\n",\r
+ Tcb)\r
);\r
\r
goto DISCARD;\r
(TcpToSendData (Tcb, 0) == 0) &&\r
(TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_ACK_NOW) || (Nbuf->TotalSize != 0)))\r
{\r
-\r
TcpToSendAck (Tcb);\r
}\r
\r
NetbufFree (Nbuf);\r
\r
if ((Parent != NULL) && (Tcb != NULL)) {\r
-\r
ASSERT (Tcb->Sk != NULL);\r
TcpClose (Tcb);\r
}\r
IN UINT8 Version\r
)\r
{\r
- TCP_HEAD *Head;\r
- TCP_CB *Tcb;\r
- TCP_SEQNO Seq;\r
- EFI_STATUS IcmpErrStatus;\r
- BOOLEAN IcmpErrIsHard;\r
- BOOLEAN IcmpErrNotify;\r
+ TCP_HEAD *Head;\r
+ TCP_CB *Tcb;\r
+ TCP_SEQNO Seq;\r
+ EFI_STATUS IcmpErrStatus;\r
+ BOOLEAN IcmpErrIsHard;\r
+ BOOLEAN IcmpErrNotify;\r
\r
if (Nbuf->TotalSize < sizeof (TCP_HEAD)) {\r
goto CLEAN_EXIT;\r
}\r
\r
- Head = (TCP_HEAD *) NetbufGetByte (Nbuf, 0, NULL);\r
+ Head = (TCP_HEAD *)NetbufGetByte (Nbuf, 0, NULL);\r
ASSERT (Head != NULL);\r
\r
Tcb = TcpLocateTcb (\r
Version,\r
FALSE\r
);\r
- if (Tcb == NULL || Tcb->State == TCP_CLOSED) {\r
-\r
+ if ((Tcb == NULL) || (Tcb->State == TCP_CLOSED)) {\r
goto CLEAN_EXIT;\r
}\r
\r
//\r
Seq = NTOHL (Head->Seq);\r
if (!(TCP_SEQ_LEQ (Tcb->SndUna, Seq) && TCP_SEQ_LT (Seq, Tcb->SndNxt))) {\r
-\r
goto CLEAN_EXIT;\r
}\r
\r
);\r
\r
if (IcmpErrNotify) {\r
-\r
SOCK_ERROR (Tcb->Sk, IcmpErrStatus);\r
}\r
\r
if (IcmpErrIsHard) {\r
-\r
TcpClose (Tcb);\r
}\r
\r