diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/tdi/tcpip/tcp/tcpdeb.c | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/private/ntos/tdi/tcpip/tcp/tcpdeb.c b/private/ntos/tdi/tcpip/tcp/tcpdeb.c new file mode 100644 index 000000000..70478f6ee --- /dev/null +++ b/private/ntos/tdi/tcpip/tcp/tcpdeb.c @@ -0,0 +1,169 @@ +/********************************************************************/ +/** Microsoft LAN Manager **/ +/** Copyright(c) Microsoft Corp., 1990-1993 **/ +/********************************************************************/ +/* :ts=4 */ + +//** TCPDEB.C - TCP debug code. +// +// This file contains the code for various TCP specific debug routines. +// + +#include "oscfg.h" + + +#include "ndis.h" +#include "cxport.h" +#include "ip.h" +#include "tdi.h" +#ifdef VXD +#include "tdivxd.h" +#include "tdistat.h" +#endif +#include "queue.h" +#include "tcp.h" +#include "tcpsend.h" +#include "tlcommon.h" + + +#ifdef DEBUG + +#ifdef NT + +ULONG TCPDebug = TCP_DEBUG_CANCEL; + +#endif + + +//* CheckRBList - Check a list of RBs for the correct size. +// +// A routine to walk a list of RBs, making sure the size is what we think +// it it. +// +// Input: RBList - List of RBs to check. +// Size - Size RBs should be. +// +// Returns: Nothing. +// +void +CheckRBList(IPRcvBuf *RBList, uint Size) +{ + uint SoFar = 0; + IPRcvBuf *List = RBList; + + while (List != NULL) { + SoFar += List->ipr_size; + List = List->ipr_next; + } + + CTEAssert(Size == SoFar); + +} + +//* CheckTCBRcv - Check receives on a TCB. +// +// Check the receive state of a TCB. +// +// Input: CheckTCB - TCB to check. +// +// Returns: Nothing. +// +void +CheckTCBRcv(TCB *CheckTCB) +{ + CTEStructAssert(CheckTCB, tcb); + + CTEAssert(!(CheckTCB->tcb_flags & FLOW_CNTLD) || + (CheckTCB->tcb_sendwin == 0)); + + if ((CheckTCB->tcb_fastchk & ~TCP_FLAG_IN_RCV) == TCP_FLAG_ACK) { + CTEAssert(CheckTCB->tcb_slowcount == 0); + CTEAssert(CheckTCB->tcb_state == TCB_ESTAB); + CTEAssert(CheckTCB->tcb_raq == NULL); + CTEAssert(!(CheckTCB->tcb_flags & TCP_SLOW_FLAGS)); + CTEAssert(!CLOSING(CheckTCB)); + } else { + CTEAssert(CheckTCB->tcb_slowcount != 0); + CTEAssert( (CheckTCB->tcb_state != TCB_ESTAB) || + (CheckTCB->tcb_raq != NULL) || + (CheckTCB->tcb_flags & TCP_SLOW_FLAGS) || + CLOSING(CheckTCB)); + } + +} + +//* CheckTCBSends - Check the send status of a TCB. +// +// A routine to check the send status of a TCB. We make sure that all +// of the SendReqs make sense, as well as making sure that the send seq. +// variables in the TCB are consistent. +// +// Input: CheckTCB - TCB to check. +// +// Returns: Nothing. +// +void +CheckTCBSends(TCB *CheckTCB) +{ + Queue *End, *Current; // End and current elements. + TCPSendReq *CurrentTSR; // Current send req we're + // examining. + uint Unacked; // Number of unacked bytes. + PNDIS_BUFFER CurrentBuffer; + TCPSendReq *TCBTsr; // Current send on TCB. + uint FoundSendReq; + + + CTEStructAssert(CheckTCB, tcb); + + // Don't check on unsynchronized TCBs. + if (!SYNC_STATE(CheckTCB->tcb_state)) + return; + + CTEAssert(SEQ_LTE(CheckTCB->tcb_senduna, CheckTCB->tcb_sendnext)); + CTEAssert(SEQ_LTE(CheckTCB->tcb_sendnext, CheckTCB->tcb_sendmax)); + CTEAssert(!(CheckTCB->tcb_flags & FIN_OUTSTANDING) || + (CheckTCB->tcb_sendnext == CheckTCB->tcb_sendmax)); + + if (CheckTCB->tcb_unacked == 0) { + CTEAssert(CheckTCB->tcb_cursend == NULL); + CTEAssert(CheckTCB->tcb_sendsize == 0); + } + + if (CheckTCB->tcb_sendbuf != NULL) + CTEAssert(CheckTCB->tcb_sendofs < NdisBufferLength(CheckTCB->tcb_sendbuf)); + + TCBTsr = CheckTCB->tcb_cursend; + FoundSendReq = (TCBTsr == NULL) ? TRUE : FALSE; + + End = QEND(&CheckTCB->tcb_sendq); + Current = QHEAD(&CheckTCB->tcb_sendq); + + Unacked = 0; + while (Current != End) { + CurrentTSR = STRUCT_OF(TCPSendReq, QSTRUCT(TCPReq, Current, tr_q), + tsr_req); + CTEStructAssert(CurrentTSR, tsr); + + if (CurrentTSR == TCBTsr) + FoundSendReq = TRUE; + + CTEAssert(CurrentTSR->tsr_unasize <= CurrentTSR->tsr_size); + + CurrentBuffer = CurrentTSR->tsr_buffer; + CTEAssert(CurrentBuffer != NULL); + + CTEAssert(CurrentTSR->tsr_offset < NdisBufferLength(CurrentBuffer)); + + Unacked += CurrentTSR->tsr_unasize; + Current = QNEXT(Current); + } + + CTEAssert(FoundSendReq); + + CTEAssert(Unacked == CheckTCB->tcb_unacked); + Unacked += ((CheckTCB->tcb_flags & FIN_SENT) ? 1 : 0); + CTEAssert((CheckTCB->tcb_sendmax - CheckTCB->tcb_senduna) <= (int) Unacked); +} + +#endif |