Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

319 lines
14 KiB

/*++
Copyright (c) 1999, Microsoft Corporation
Module Name:
sample\defs.h
Abstract:
The file contains various...
. constants
. definitions
. macros
- memory-allocation
- logging
- tracing
--*/
#ifndef _DEFS_H_
#define _DEFS_H_
// constants
#define INTERFACE_TABLE_BUCKETS 29 // # buckets in the interface hash table
#define NOW 0
#define INFINITE_INTERVAL 0x7fffffff
#define PERIODIC_INTERVAL 5 // # seconds
#define MAX_PACKET_LENGTH 512
// definitions
#define is ==
#define and &&
#define or ||
#define GLOBAL_HEAP g_ce.hGlobalHeap
#define TRACEID g_ce.dwTraceID
#define LOGLEVEL g_ce.dwLogLevel
#define LOGHANDLE g_ce.hLogHandle
#define LOCKSTORE g_ce.dlsDynamicLocksStore
// invoked when entering API or worker functions
#define ENTER_SAMPLE_API() EnterSampleAPI()
#define ENTER_SAMPLE_WORKER() EnterSampleWorker()
// invoked when leaving API or worker functions
#define LEAVE_SAMPLE_API() LeaveSampleWorker()
#define LEAVE_SAMPLE_WORKER() LeaveSampleWorker()
// dynamic locks
#define ACQUIRE_READ_DLOCK(pLock) \
AcquireDynamicReadwriteLock(&pLock, READ_MODE, LOCKSTORE)
#define RELEASE_READ_DLOCK(pLock) \
ReleaseDynamicReadwriteLock(pLock, READ_MODE, LOCKSTORE)
#define ACQUIRE_WRITE_DLOCK(pLock) \
AcquireDynamicReadwriteLock(&pLock, WRITE_MODE, LOCKSTORE)
#define RELEASE_WRITE_DLOCK(pLock) \
ReleaseDynamicReadwriteLock(pLock, WRITE_MODE, LOCKSTORE)
// macros
#define SECTOMILLISEC(x) ((x) * 1000)
#define MAX(a, b) (((a) >= (b)) ? (a) : (b))
#define MIN(a, b) (((a) <= (b)) ? (a) : (b))
// IP ADDRESS
// type
typedef DWORD IPADDRESS, *PIPADDRESS;
// definitions
#define IP_LOWEST 0x00000000
#define IP_HIGHEST 0xffffffff
#define STAR 0x00000000
// macros
// compare a and b
#define IP_COMPARE(a, b) (((a) < (b)) ? -1 \
: (((a) is (b)) ? 0 : 1))
// assign b to a
#define IP_ASSIGN(pip, ip) *(pip) = (ip)
// verify whether an ip address is valid
#define IP_VALID(ip) (IP_COMPARE(ip, IP_HIGHEST) is -1)
// returns the string representation of an ip address in a static buffer
#define INET_NTOA(x) (inet_ntoa(*(struct in_addr*)&(x)))
// TIMER
// macros
#define CREATE_TIMER(phHandle, pfnCallback, pvContext, ulWhen, pdwErr) \
{ \
if (CreateTimerQueueTimer((phHandle), \
g_ce.hTimerQueue, \
(pfnCallback), \
(pvContext), \
SECTOMILLISEC(ulWhen), \
INFINITE_INTERVAL, \
0)) \
{ \
*(pdwErr) = NO_ERROR; \
} \
else \
{ \
*(pdwErr) = GetLastError(); \
TRACE1(ANY, "Error %u creating timer", *(pdwErr)); \
LOGERR0(CREATE_TIMER_FAILED, *(pdwErr)); \
} \
}
// it is safe to hold locks while making this call since
// it is non blocking (NULL for hCompletionEvent).
#define DELETE_TIMER(hHandle, pdwErr) \
{ \
if (DeleteTimerQueueTimer(g_ce.hTimerQueue, \
(hHandle), \
NULL)) \
{ \
*(pdwErr) = NO_ERROR; \
} \
else \
{ \
*(pdwErr) = GetLastError(); \
TRACE1(ANY, "Error %u deleting timer, continuing...", *(pdwErr)); \
} \
}
#define RESTART_TIMER(hHandle, ulWhen, pdwErr) \
{ \
if (ChangeTimerQueueTimer(g_ce.hTimerQueue, \
(hHandle), \
SECTOMILLISEC(ulWhen), \
INFINITE_INTERVAL)) \
{ \
*(pdwErr) = NO_ERROR; \
} \
else \
{ \
*(pdwErr) = GetLastError(); \
TRACE1(ANY, "Error %u restarting timer, continuing...", *(pdwErr)); \
} \
}
// MEMORY ALLOCATION
// macros
#define MALLOC(ppPointer, ulSize, pdwErr) \
{ \
if (*(ppPointer) = HeapAlloc(GLOBAL_HEAP, HEAP_ZERO_MEMORY, (ulSize))) \
{ \
*(pdwErr) = NO_ERROR; \
} \
else \
{ \
*(pdwErr) = ERROR_NOT_ENOUGH_MEMORY; \
TRACE1(ANY, "Error allocating %u bytes", (ulSize)); \
LOGERR0(HEAP_ALLOC_FAILED, *(pdwErr)); \
} \
}
#define REALLOC(ptr, size) HeapReAlloc(GLOBAL_HEAP, 0, ptr, size)
#define FREE(ptr) \
{ \
HeapFree(GLOBAL_HEAP, 0, (ptr)); \
(ptr) = NULL; \
}
#define FREE_NOT_NULL(ptr) \
{ \
if (!(ptr)) HeapFree(GLOBAL_HEAP, 0, (ptr)); \
(ptr) = NULL; \
}
// TRACING
// definitions...
#define IPSAMPLE_TRACE_ANY ((DWORD)0xFFFF0000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_ENTER ((DWORD)0x00010000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_LEAVE ((DWORD)0x00020000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_DEBUG ((DWORD)0x00040000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_CONFIGURATION ((DWORD)0x00100000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_NETWORK ((DWORD)0x00200000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_PACKET ((DWORD)0x00400000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_TIMER ((DWORD)0x00800000 | TRACE_USE_MASK)
#define IPSAMPLE_TRACE_MIB ((DWORD)0x01000000 | TRACE_USE_MASK)
// macros...
#define TRACE0(l,a) \
if (TRACEID != INVALID_TRACEID) \
TracePrintfEx(TRACEID, IPSAMPLE_TRACE_ ## l, a)
#define TRACE1(l,a,b) \
if (TRACEID != INVALID_TRACEID) \
TracePrintfEx(TRACEID, IPSAMPLE_TRACE_ ## l, a, b)
#define TRACE2(l,a,b,c) \
if (TRACEID != INVALID_TRACEID) \
TracePrintfEx(TRACEID, IPSAMPLE_TRACE_ ## l, a, b, c)
#define TRACE3(l,a,b,c,d) \
if (TRACEID != INVALID_TRACEID) \
TracePrintfEx(TRACEID, IPSAMPLE_TRACE_ ## l, a, b, c, d)
#define TRACE4(l,a,b,c,d,e) \
if (TRACEID != INVALID_TRACEID) \
TracePrintfEx(TRACEID, IPSAMPLE_TRACE_ ## l, a, b, c, d, e)
#define TRACE5(l,a,b,c,d,e,f) \
if (TRACEID != INVALID_TRACEID) \
TracePrintfEx(TRACEID, IPSAMPLE_TRACE_ ## l, a, b, c, d, e, f)
// EVENT LOGGING
// definitions...
#define LOGERR RouterLogError
#define LOGWARN RouterLogWarning
#define LOGINFO RouterLogInformation
#define LOGWARNDATA RouterLogWarningData
// macros...
// ERRORS
#define LOGERR0(msg,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_ERROR) \
LOGERR(LOGHANDLE,IPSAMPLELOG_ ## msg,0,NULL,(err))
#define LOGERR1(msg,a,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_ERROR) \
LOGERR(LOGHANDLE,IPSAMPLELOG_ ## msg,1,&(a),(err))
#define LOGERR2(msg,a,b,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_ERROR) { \
LPSTR _asz[2] = { (a), (b) }; \
LOGERR(LOGHANDLE,IPSAMPLELOG_ ## msg,2,_asz,(err)); \
}
#define LOGERR3(msg,a,b,c,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_ERROR) { \
LPSTR _asz[3] = { (a), (b), (c) }; \
LOGERR(LOGHANDLE,IPSAMPLELOG_ ## msg,3,_asz,(err)); \
}
#define LOGERR4(msg,a,b,c,d,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_ERROR) { \
LPSTR _asz[4] = { (a), (b), (c), (d) }; \
LOGERR(LOGHANDLE,IPSAMPLELOG_ ## msg,4,_asz,(err)); \
}
// WARNINGS
#define LOGWARN0(msg,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_WARN) \
LOGWARN(LOGHANDLE,IPSAMPLELOG_ ## msg,0,NULL,(err))
#define LOGWARN1(msg,a,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_WARN) \
LOGWARN(LOGHANDLE,IPSAMPLELOG_ ## msg,1,&(a),(err))
#define LOGWARN2(msg,a,b,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_WARN) { \
LPSTR _asz[2] = { (a), (b) }; \
LOGWARN(LOGHANDLE,IPSAMPLELOG_ ## msg,2,_asz,(err)); \
}
#define LOGWARN3(msg,a,b,c,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_WARN) { \
LPSTR _asz[3] = { (a), (b), (c) }; \
LOGWARN(LOGHANDLE,IPSAMPLELOG_ ## msg,3,_asz,(err)); \
}
#define LOGWARN4(msg,a,b,c,d,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_WARN) { \
LPSTR _asz[4] = { (a), (b), (c), (d) }; \
LOGWARN(LOGHANDLE,IPSAMPLELOG_ ## msg,4,_asz,(err)); \
}
#define LOGWARNDATA2(msg,a,b,dw,buf) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_WARN) { \
LPSTR _asz[2] = { (a), (b) }; \
LOGWARNDATA(LOGHANDLE,IPSAMPLELOG_ ## msg,2,_asz,(dw),(buf)); \
}
// INFORMATION
#define LOGINFO0(msg,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_INFO) \
LOGINFO(LOGHANDLE,IPSAMPLELOG_ ## msg,0,NULL,(err))
#define LOGINFO1(msg,a,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_INFO) \
LOGINFO(LOGHANDLE,IPSAMPLELOG_ ## msg,1,&(a),(err))
#define LOGINFO2(msg,a,b,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_INFO) { \
LPSTR _asz[2] = { (a), (b) }; \
LOGINFO(LOGHANDLE,IPSAMPLELOG_ ## msg,2,_asz,(err)); \
}
#define LOGINFO3(msg,a,b,c,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_INFO) { \
LPSTR _asz[3] = { (a), (b), (c) }; \
LOGINFO(LOGHANDLE,IPSAMPLELOG_ ## msg,3,_asz,(err)); \
}
#define LOGINFO4(msg,a,b,c,d,err) \
if (LOGLEVEL >= IPSAMPLE_LOGGING_INFO) { \
LPSTR _asz[4] = { (a), (b), (c), (d) }; \
LOGINFO(LOGHANDLE,IPSAMPLELOG_ ## msg,4,_asz,(err)); \
}
#endif // _DEFS_H_