|
|
/*++
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_
|