mirror of https://github.com/acidanthera/audk.git
The patch acknowledges the TCP zero window probe message, either the format with 1 byte new data, or no new data. It also increases exponentially the interval between successive probes when performing TCP zero window probe.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10831 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
8730386e6d
commit
ac8cca2a4d
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
TCP input process routines.
|
||||
|
||||
Copyright (c) 2005 - 2009, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -33,7 +33,7 @@ TcpSeqAcceptable (
|
|||
)
|
||||
{
|
||||
return (TCP_SEQ_LEQ (Tcb->RcvWl2, Seg->End) &&
|
||||
TCP_SEQ_LEQ (Seg->Seq, Tcb->RcvWl2 + Tcb->RcvWnd));
|
||||
TCP_SEQ_LT (Seg->Seq, Tcb->RcvWl2 + Tcb->RcvWnd));
|
||||
}
|
||||
|
||||
|
||||
|
@ -925,6 +925,14 @@ TcpInput (
|
|||
// Process segment in SYN_RCVD or TCP_CONNECTED states
|
||||
//
|
||||
|
||||
//
|
||||
// Clear probe timer since the RecvWindow is opened.
|
||||
//
|
||||
if (Tcb->ProbeTimerOn && (Seg->Wnd != 0)) {
|
||||
TcpClearTimer (Tcb, TCP_TIMER_PROBE);
|
||||
Tcb->ProbeTimerOn = FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// First step: Check whether SEG.SEQ is acceptable
|
||||
//
|
||||
|
@ -1281,11 +1289,6 @@ StepSix:
|
|||
Tcb->Idle = 0;
|
||||
TcpSetKeepaliveTimer (Tcb);
|
||||
|
||||
if (TCP_TIMER_ON (Tcb->EnabledTimer, TCP_TIMER_PROBE)) {
|
||||
|
||||
TcpClearTimer (Tcb, TCP_TIMER_PROBE);
|
||||
}
|
||||
|
||||
if (TCP_FLG_ON (Seg->Flag, TCP_FLG_URG) &&
|
||||
!TCP_FIN_RCVD (Tcb->State)) {
|
||||
|
||||
|
|
|
@ -77,7 +77,9 @@ TcpInitTcbLocal (
|
|||
//
|
||||
// First window size is never scaled
|
||||
//
|
||||
Tcb->RcvWndScale = 0;
|
||||
Tcb->RcvWndScale = 0;
|
||||
|
||||
Tcb->ProbeTimerOn = FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
TCP output process routines.
|
||||
|
||||
Copyright (c) 2005 - 2009, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -267,7 +267,9 @@ SetPersistTimer:
|
|||
Tcb)
|
||||
);
|
||||
|
||||
TcpSetProbeTimer (Tcb);
|
||||
if (!Tcb->ProbeTimerOn) {
|
||||
TcpSetProbeTimer (Tcb);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Tcp Protocol header file.
|
||||
|
||||
Copyright (c) 2005 - 2009, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -206,6 +206,7 @@ struct _TCP_CB {
|
|||
INT32 NextExpire; ///< Count down offset for the nearest timer
|
||||
UINT32 Idle; ///< How long the connection is in idle
|
||||
UINT32 ProbeTime; ///< The time out value for current window prober
|
||||
BOOLEAN ProbeTimerOn;///< If TRUE, the probe time is on.
|
||||
|
||||
//
|
||||
// RFC1323 defined variables, about window scale,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
TCP timer related functions.
|
||||
|
||||
Copyright (c) 2005 - 2007, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -212,6 +212,7 @@ TcpProbeTimeout (
|
|||
if ((TcpDataToSend (Tcb, 1) != 0) && (TcpToSendData (Tcb, 1) > 0)) {
|
||||
|
||||
ASSERT (TCP_TIMER_ON (Tcb->EnabledTimer, TCP_TIMER_REXMIT) != 0);
|
||||
Tcb->ProbeTimerOn = FALSE;
|
||||
return ;
|
||||
}
|
||||
|
||||
|
@ -387,8 +388,9 @@ TcpSetProbeTimer (
|
|||
IN OUT TCP_CB *Tcb
|
||||
)
|
||||
{
|
||||
if (!TCP_TIMER_ON (Tcb->EnabledTimer, TCP_TIMER_PROBE)) {
|
||||
Tcb->ProbeTime = Tcb->Rto;
|
||||
if (!Tcb->ProbeTimerOn) {
|
||||
Tcb->ProbeTime = Tcb->Rto;
|
||||
Tcb->ProbeTimerOn = TRUE;
|
||||
|
||||
} else {
|
||||
Tcb->ProbeTime <<= 1;
|
||||
|
|
Loading…
Reference in New Issue