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
15 KiB
319 lines
15 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_
|