164 lines
3.6 KiB
C
164 lines
3.6 KiB
C
|
// Copyright (c) 1997, Microsoft Corporation, all rights reserved
|
||
|
//
|
||
|
// debug.c
|
||
|
// RAS L2TP WAN mini-port/call-manager driver
|
||
|
// Debug utilities and globals
|
||
|
//
|
||
|
// 01/07/97 Steve Cobb
|
||
|
|
||
|
|
||
|
#include "l2tpp.h"
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Global data definitions
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#ifdef TESTMODE
|
||
|
#define DEFAULTTRACELEVEL TL_I
|
||
|
#define DEFAULTTRACEMASK TM_XCMsg
|
||
|
#else
|
||
|
#define DEFAULTTRACELEVEL TL_None
|
||
|
#define DEFAULTTRACEMASK TM_Base
|
||
|
#endif
|
||
|
|
||
|
// Active debug trace level and active trace set mask. Set these variables
|
||
|
// with the debugger at startup to enable and filter the debug output. All
|
||
|
// messages with (TL_*) level less than or equal to 'g_ulTraceLevel' are
|
||
|
// displayed. All messages from any (TM_*) set(s) present in 'g_ulTraceMask'
|
||
|
// are displayed.
|
||
|
//
|
||
|
ULONG g_ulTraceLevel = DEFAULTTRACELEVEL;
|
||
|
ULONG g_ulTraceMask = DEFAULTTRACEMASK;
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Routines
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
#if DBG
|
||
|
VOID
|
||
|
CheckList(
|
||
|
IN LIST_ENTRY* pList,
|
||
|
IN BOOLEAN fShowLinks )
|
||
|
|
||
|
// Tries to detect corruption in list 'pList', printing verbose linkage
|
||
|
// output if 'fShowLinks' is set.
|
||
|
//
|
||
|
{
|
||
|
LIST_ENTRY* pLink;
|
||
|
ULONG ul;
|
||
|
|
||
|
ul = 0;
|
||
|
for (pLink = pList->Flink;
|
||
|
pLink != pList;
|
||
|
pLink = pLink->Flink)
|
||
|
{
|
||
|
if (fShowLinks)
|
||
|
{
|
||
|
DbgPrint( "L2TP: CheckList($%p) Flink(%d)=$%p\n",
|
||
|
pList, ul, pLink );
|
||
|
}
|
||
|
++ul;
|
||
|
}
|
||
|
|
||
|
for (pLink = pList->Blink;
|
||
|
pLink != pList;
|
||
|
pLink = pLink->Blink)
|
||
|
{
|
||
|
if (fShowLinks)
|
||
|
{
|
||
|
DbgPrint( "L2TP: CheckList($%p) Blink(%d)=$%p\n",
|
||
|
pList, ul, pLink );
|
||
|
}
|
||
|
--ul;
|
||
|
}
|
||
|
|
||
|
if (ul)
|
||
|
{
|
||
|
DbgBreakPoint();
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#if DBG
|
||
|
VOID
|
||
|
Dump(
|
||
|
IN CHAR* p,
|
||
|
IN ULONG cb,
|
||
|
IN BOOLEAN fAddress,
|
||
|
IN ULONG ulGroup )
|
||
|
|
||
|
// Hex dump 'cb' bytes starting at 'p' grouping 'ulGroup' bytes together.
|
||
|
// For example, with 'ulGroup' of 1, 2, and 4:
|
||
|
//
|
||
|
// 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|
||
|
// 0000 0000 0000 0000 0000 0000 0000 0000 |................|
|
||
|
// 00000000 00000000 00000000 00000000 |................|
|
||
|
//
|
||
|
// If 'fAddress' is true, the memory address dumped is prepended to each
|
||
|
// line.
|
||
|
//
|
||
|
{
|
||
|
while (cb)
|
||
|
{
|
||
|
INT cbLine;
|
||
|
|
||
|
cbLine = (cb < DUMP_BytesPerLine) ? cb : DUMP_BytesPerLine;
|
||
|
DumpLine( p, cbLine, fAddress, ulGroup );
|
||
|
cb -= cbLine;
|
||
|
p += cbLine;
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#if DBG
|
||
|
VOID
|
||
|
DumpLine(
|
||
|
IN CHAR* p,
|
||
|
IN ULONG cb,
|
||
|
IN BOOLEAN fAddress,
|
||
|
IN ULONG ulGroup )
|
||
|
{
|
||
|
CHAR* pszDigits = "0123456789ABCDEF";
|
||
|
CHAR szHex[ ((2 + 1) * DUMP_BytesPerLine) + 1 ];
|
||
|
CHAR* pszHex = szHex;
|
||
|
CHAR szAscii[ DUMP_BytesPerLine + 1 ];
|
||
|
CHAR* pszAscii = szAscii;
|
||
|
ULONG ulGrouped = 0;
|
||
|
|
||
|
if (fAddress)
|
||
|
DbgPrint( "L2TP: %p: ", p );
|
||
|
else
|
||
|
DbgPrint( "L2TP: " );
|
||
|
|
||
|
while (cb)
|
||
|
{
|
||
|
*pszHex++ = pszDigits[ ((UCHAR )*p) / 16 ];
|
||
|
*pszHex++ = pszDigits[ ((UCHAR )*p) % 16 ];
|
||
|
|
||
|
if (++ulGrouped >= ulGroup)
|
||
|
{
|
||
|
*pszHex++ = ' ';
|
||
|
ulGrouped = 0;
|
||
|
}
|
||
|
|
||
|
*pszAscii++ = (*p >= 32 && *p < 128) ? *p : '.';
|
||
|
|
||
|
++p;
|
||
|
--cb;
|
||
|
}
|
||
|
|
||
|
*pszHex = '\0';
|
||
|
*pszAscii = '\0';
|
||
|
|
||
|
DbgPrint(
|
||
|
"%-*s|%-*s|\n",
|
||
|
(2 * DUMP_BytesPerLine) + (DUMP_BytesPerLine / ulGroup), szHex,
|
||
|
DUMP_BytesPerLine, szAscii );
|
||
|
}
|
||
|
#endif
|