298 lines
11 KiB
C
298 lines
11 KiB
C
|
//=============================================================================
|
||
|
// Copyright (c) 1998 Microsoft Corporation
|
||
|
// File Name: trace.h
|
||
|
// Abstract:
|
||
|
//
|
||
|
// Author: K.S.Lokesh (lokeshs@) 1-1-98
|
||
|
//=============================================================================
|
||
|
|
||
|
#ifndef _DVMRPTRACE_H_
|
||
|
#define _DVMRPTRACE_H_
|
||
|
|
||
|
#ifdef MIB_DEBUG
|
||
|
#if !DBG
|
||
|
#undef MIB_DEBUG
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// constants and macros used for tracing
|
||
|
//
|
||
|
|
||
|
#define DVMRP_TRACE_ANY ((DWORD)0xFFFF0000 | TRACE_USE_MASK)
|
||
|
|
||
|
#define DVMRP_TRACE_ERR ((DWORD)0x00010000 | TRACE_USE_MASK)
|
||
|
|
||
|
#define DVMRP_TRACE_ENTER ((DWORD)0x00020000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_LEAVE ((DWORD)0x00020000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_START ((DWORD)0x00020000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_STOP ((DWORD)0x00020000 | TRACE_USE_MASK)
|
||
|
|
||
|
#define DVMRP_TRACE_IF ((DWORD)0x00040000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_CONFIG ((DWORD)0x00040000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_RECEIVE ((DWORD)0x00100000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_SEND ((DWORD)0x00200000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_QUERIER ((DWORD)0x00400000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_GROUP ((DWORD)0x00400000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_MGM ((DWORD)0x00800000 | TRACE_USE_MASK)
|
||
|
|
||
|
#if DBG
|
||
|
|
||
|
#define DVMRP_TRACE_KSL ((DWORD)0x01000000 | TRACE_USE_MASK)
|
||
|
|
||
|
#define DVMRP_TRACE_WORKER ((DWORD)0x01000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_ENTER1 ((DWORD)0x02000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_LEAVE1 ((DWORD)0x02000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_MIB ((DWORD)0x04000000 | TRACE_USE_MASK)
|
||
|
|
||
|
#define DVMRP_TRACE_DYNLOCK ((DWORD)0x08000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_TIMER ((DWORD)0x10000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_CS ((DWORD)0x20000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_TIMER1 ((DWORD)0x40000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_CS1 ((DWORD)0x80000000 | TRACE_USE_MASK)
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define DVMRP_TRACE_KSL ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
|
||
|
#define DVMRP_TRACE_WORKER ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_ENTER1 ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_LEAVE1 ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_MIB ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
|
||
|
#define DVMRP_TRACE_DYNLOCK ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_TIMER ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_CS ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_TIMER1 ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
#define DVMRP_TRACE_CS1 ((DWORD)0x00000000 | TRACE_USE_MASK)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef LOCK_DBG
|
||
|
|
||
|
#define ENTER_CRITICAL_SECTION(pcs, type, proc) \
|
||
|
Trace2(CS,"----To enter %s in %s", type, proc); \
|
||
|
EnterCriticalSection(pcs); \
|
||
|
Trace2(CS1,"----Entered %s in %s", type, proc)
|
||
|
|
||
|
#define LEAVE_CRITICAL_SECTION(pcs, type, proc) \
|
||
|
Trace2(CS1,"----Left %s in %s", type, proc); \
|
||
|
LeaveCriticalSection(pcs)
|
||
|
|
||
|
#define WAIT_FOR_SINGLE_OBJECT( event, time, type, proc) \
|
||
|
Trace2(EVENT, "++++To wait for singleObj %s in %s", type, proc); \
|
||
|
WaitForSingleObject(event, time); \
|
||
|
Trace2(EVENT, "++++WaitForSingleObj returned %s in %s", type, proc)
|
||
|
|
||
|
#define SET_EVENT(event, type, proc) \
|
||
|
Trace2(EVENT, "++++SetEvent %s in %s", type, proc); \
|
||
|
SetEvent(event)
|
||
|
|
||
|
#else
|
||
|
#define ENTER_CRITICAL_SECTION(pcs, type, proc) \
|
||
|
EnterCriticalSection(pcs)
|
||
|
|
||
|
#define LEAVE_CRITICAL_SECTION(pcs, type, proc) \
|
||
|
LeaveCriticalSection(pcs)
|
||
|
|
||
|
#define WAIT_FOR_SINGLE_OBJECT( event, time, type, proc) \
|
||
|
WaitForSingleObject(event, time)
|
||
|
|
||
|
#define SET_EVENT(event, type, proc) \
|
||
|
SetEvent(event)
|
||
|
|
||
|
#endif // LOCK_DBG
|
||
|
|
||
|
|
||
|
#define TRACEID Globals.TraceId
|
||
|
|
||
|
|
||
|
#define Trace0(l,a) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a)
|
||
|
#define Trace1(l,a,b) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b)
|
||
|
#define Trace2(l,a,b,c) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c)
|
||
|
#define Trace3(l,a,b,c,d) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c, d)
|
||
|
#define Trace4(l,a,b,c,d,e) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c, d, e)
|
||
|
#define Trace5(l,a,b,c,d,e,f) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c, d, e, f)
|
||
|
#define Trace6(l,a,b,c,d,e,f,g) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c, d, e, f,g)
|
||
|
#define Trace7(l,a,b,c,d,e,f,g,h) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c, d, e, f,g,h)
|
||
|
#define Trace8(l,a,b,c,d,e,f,g,h,i) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c, d, e, f,g,h,i)
|
||
|
#define Trace9(l,a,b,c,d,e,f,g,h,i,j) \
|
||
|
if (TRACEID) TracePrintfEx(TRACEID, DVMRP_TRACE_ ## l, a, b, c, d, e, f,g,h,i,j)
|
||
|
|
||
|
|
||
|
#define TRACEDUMP(l,a,b,c) \
|
||
|
TraceDumpEx(TRACEID,l,a,b,c,TRUE)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef ENTER_DBG
|
||
|
|
||
|
#define TraceEnter(X) TracePrintfEx(TRACEID, DVMRP_TRACE_ENTER, "Entered: "X)
|
||
|
#define TraceLeave(X) TracePrintfEx(TRACEID, DVMRP_TRACE_ENTER, "Leaving: "X"\n")
|
||
|
#else
|
||
|
|
||
|
#define TraceEnter(X)
|
||
|
#define TraceLeave(X)
|
||
|
|
||
|
#endif // ENTER_DBG
|
||
|
|
||
|
//
|
||
|
// Event logging macros
|
||
|
//
|
||
|
|
||
|
#define LOGLEVEL GlobalConfig.LoggingLevel
|
||
|
#define LOGHANDLE Globals.LogHandle
|
||
|
#define LOGERR RouterLogError
|
||
|
#define LOGERRDATA RouterLogErrorData
|
||
|
#define LOGWARN RouterLogWarning
|
||
|
#define LOGWARNDATA RouterLogWarningData
|
||
|
#define LOGINFO RouterLogInformation
|
||
|
#define LOGWARNDATA RouterLogWarningData
|
||
|
|
||
|
|
||
|
// Error logging
|
||
|
|
||
|
#define Logerr0(msg,err) {\
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_ERROR) \
|
||
|
RouterLogEventEx(LOGHANDLE,EVENTLOG_ERROR_TYPE,\
|
||
|
(err), DVMRPLOG_ ## msg, ""); \
|
||
|
}
|
||
|
|
||
|
#define Logerr1(msg,Format, a,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_ERROR) \
|
||
|
RouterLogEventEx(LOGHANDLE,EVENTLOG_ERROR_TYPE,\
|
||
|
(err), DVMRPLOG_ ## msg, Format, (a))
|
||
|
|
||
|
#define Logerr2(msg,Format, a, b, err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_ERROR) \
|
||
|
RouterLogEventEx(LOGHANDLE,EVENTLOG_ERROR_TYPE,\
|
||
|
(err), DVMRPLOG_ ## msg, Format,(a),(b))
|
||
|
|
||
|
#define Logerr3(msg,Format, a, b, c, err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_ERROR) \
|
||
|
RouterLogEventEx(LOGHANDLE,EVENTLOG_ERROR_TYPE,\
|
||
|
(err), DVMRPLOG_ ## msg, Format,(a),(b), (c))
|
||
|
|
||
|
#define Logerr4(msg,Format, a, b, c, d, err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_ERROR) \
|
||
|
RouterLogEventEx(LOGHANDLE,EVENTLOG_ERROR_TYPE,\
|
||
|
(err), DVMRPLOG_ ## msg, Format,(a),(b), (c), (d))
|
||
|
|
||
|
|
||
|
// Warning logging
|
||
|
|
||
|
#define Logwarn0(msg,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_WARN) \
|
||
|
LOGWARN(LOGHANDLE,DVMRPLOG_ ## msg,0,NULL,(err))
|
||
|
#define Logwarn1(msg,a,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_WARN) \
|
||
|
LOGWARN(LOGHANDLE,DVMRPLOG_ ## msg,1,&(a),(err))
|
||
|
#define Logwarn2(msg,a,b,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_WARN) { \
|
||
|
LPSTR _asz[2] = { (a), (b) }; \
|
||
|
LOGWARN(LOGHANDLE,DVMRPLOG_ ## msg,2,_asz,(err)); \
|
||
|
}
|
||
|
#define Logwarn3(msg,a,b,c,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_WARN) { \
|
||
|
LPSTR _asz[3] = { (a), (b), (c) }; \
|
||
|
LOGWARN(LOGHANDLE,DVMRPLOG_ ## msg,3,_asz,(err)); \
|
||
|
}
|
||
|
#define Logwarn4(msg,a,b,c,d,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_WARN) { \
|
||
|
LPSTR _asz[4] = { (a), (b), (c), (d) }; \
|
||
|
LOGWARN(LOGHANDLE,DVMRPLOG_ ## msg,4,_asz,(err)); \
|
||
|
}
|
||
|
|
||
|
#define LOGWARNDATA2(msg,a,b,dw,buf) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_WARN) { \
|
||
|
LPSTR _asz[2] = { (a), (b) }; \
|
||
|
LOGWARNDATA(LOGHANDLE,DVMRPLOG_ ## msg,2,_asz,(dw),(buf)); \
|
||
|
}
|
||
|
|
||
|
|
||
|
// Information logging
|
||
|
|
||
|
#define Loginfo0(msg,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_INFO) \
|
||
|
LOGINFO(LOGHANDLE,DVMRPLOG_ ## msg,0,NULL,(err))
|
||
|
#define Loginfo1(msg,a,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_INFO) \
|
||
|
LOGINFO(LOGHANDLE,DVMRPLOG_ ## msg,1,&(a),(err))
|
||
|
#define Loginfo2(msg,a,b,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_INFO) { \
|
||
|
LPSTR _asz[2] = { (a), (b) }; \
|
||
|
LOGINFO(LOGHANDLE,DVMRPLOG_ ## msg,2,_asz,(err)); \
|
||
|
}
|
||
|
#define Loginfo3(msg,a,b,c,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_INFO) { \
|
||
|
LPSTR _asz[3] = { (a), (b), (c) }; \
|
||
|
LOGINFO(LOGHANDLE,DVMRPLOG_ ## msg,3,_asz,(err)); \
|
||
|
}
|
||
|
#define Loginfo4(msg,a,b,c,d,err) \
|
||
|
if (LOGLEVEL >= DVMRP_LOGGING_INFO) { \
|
||
|
LPSTR _asz[4] = { (a), (b), (c), (d) }; \
|
||
|
LOGINFO(LOGHANDLE,DVMRPLOG_ ## msg,4,_asz,(err)); \
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// INITIALIZE_TRACING_LOGGING
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
//
|
||
|
// also set the default logging level. It will be reset during
|
||
|
// StartProtocol(), when logging level is set as part of global config
|
||
|
//
|
||
|
|
||
|
#define INITIALIZE_TRACING_LOGGING() {\
|
||
|
if (!Globals.TraceId) { \
|
||
|
Globals.TraceId = TraceRegister("Dvmrp"); \
|
||
|
} \
|
||
|
\
|
||
|
if (!Globals.LogHandle) { \
|
||
|
Globals.LogHandle = RouterLogRegister("Dvmrp"); \
|
||
|
GlobalConfig.LoggingLevel = DVMRP_LOGGING_WARN; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// DEINITIALIZE_TRACING_LOGGING
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#define DEINITIALIZE_TRACING_LOGGING() { \
|
||
|
if (!Globals.TraceId) { \
|
||
|
TraceDeregister(Globals.TraceId); \
|
||
|
Globals.TraceId = 0; \
|
||
|
} \
|
||
|
\
|
||
|
if (!Globals.LogHandle) { \
|
||
|
RouterLogDeregister(Globals.LogHandle); \
|
||
|
Globals.LogHandle = NULL; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// IP address conversion macro:
|
||
|
// calls inet_ntoa directly on a DWORD, by casting it as an IN_ADDR.
|
||
|
//
|
||
|
|
||
|
#define INET_NTOA(dw) inet_ntoa( *(PIN_ADDR)&(dw) )
|
||
|
|
||
|
|
||
|
#endif // _DVMRPTRACE_H_
|
||
|
|