|
|
//=============================================================================
// Copyright (c) 1998 Microsoft Corporation
// Module Name: defines.h
// Abstract:
//
// Author: K.S.Lokesh (lokeshs@) 1-1-98
//=============================================================================
//
// IPADDR typedef
//
#ifndef IPADDR
typedef DWORD IPADDR; #endif
//
// instead of using goto:end to go to the end of the block, use the following
//
#define BEGIN_BREAKOUT_BLOCK1 do
#define GOTO_END_BLOCK1 goto END_BREAKOUT_BLOCK_1
#define END_BREAKOUT_BLOCK1 while(FALSE); END_BREAKOUT_BLOCK_1:
#define BEGIN_BREAKOUT_BLOCK2 do
#define GOTO_END_BLOCK2 goto END_BREAKOUT_BLOCK_2
#define END_BREAKOUT_BLOCK2 while(FALSE); END_BREAKOUT_BLOCK_2:
//-----------------------------------------------------------------------------
// memory allocation/deallocation macros, error macros
//-----------------------------------------------------------------------------
#define DVMRP_ALLOC(sz) HeapAlloc(Globals1.Heap,0,(sz))
#define DVMRP_ALLOC_AND_ZERO(sz) \
HeapAlloc(Globals1.Heap,HEAP_ZERO_MEMORY,(sz)) #define DVMRP_FREE(p) HeapFree(Globals1.Heap, 0, (p))
#define DVMRP_FREE_AND_NULL(p) {\
if (p) HeapFree(Globals1.Heap, 0, (p));\ (p) = NULL; \ } #define DVMRP_FREE_NOT_NULL(p) ((p) ? DVMRP_FREE(p) : TRUE)
#define PROCESS_ALLOC_FAILURE1(ptr, Error,arg2, GotoStmt) \
if (ptr==NULL) {\ Error = GetLastError();\ Trace3(ERR, "Error %d allocating %d bytes",Error,arg2);\ Logerr0(HEAP_ALLOC_FAILED, Error);\ GotoStmt;\ }
#define PROCESS_ALLOC_FAILURE2(ptr, Name, Error,arg2,GotoStmt) \
if (ptr==NULL) {\ Error = GetLastError();\ Trace3(ERR, "Error %d allocating %d bytes for %s", \ Error, arg2, Name); \ Logerr0(HEAP_ALLOC_FAILED, Error);\ GotoStmt;\ }
#define PROCESS_ALLOC_FAILURE3(ptr, Format, Error,arg2,arg3, GotoStmt) \
if (ptr==NULL) {\ Error = GetLastError();\ Trace3(ERR, "Error %d allocating %d bytes for " ## Format, \ Error, arg2, arg3); \ Logerr0(HEAP_ALLOC_FAILED, Error);\ GotoStmt;\ }
#define HANDLE_CRITICAL_SECTION_EXCEPTION(Error, GotoStmt) \
except (EXCEPTION_EXECUTE_HANDLER) { \ \ Error = GetExceptionCode(); \ Trace1(ERR, "Error initializing critical section", Error); \ \ Logerr0(INIT_CRITSEC_FAILED, Error); \ GotoStmt; \ }
//-----------------------------------------------------------------------------
// general ip address macros
//-----------------------------------------------------------------------------
#define ALL_DVMRP_ROUTERS_MCAST_GROUP 0x040000E0
//
// This macro compares two IP addresses in network order by
// masking off each pair of octets and doing a subtraction;
// the result of the final subtraction is stored in the third argument.
//
#define INET_CMP(a,b,c) \
(((c) = (((a) & 0x000000ff) - ((b) & 0x000000ff))) ? (c) : \ (((c) = (((a) & 0x0000ff00) - ((b) & 0x0000ff00))) ? (c) : \ (((c) = (((a) & 0x00ff0000) - ((b) & 0x00ff0000))) ? (c) : \ (((c) = ((((a)>>8) & 0x00ff0000) - (((b)>>8) & 0x00ff0000)))))))
#define PRINT_IPADDR(x) \
((x)&0x000000ff),(((x)&0x0000ff00)>>8),\ (((x)&0x00ff0000)>>16),(((x)&0xff000000)>>24)
//
// assert macros
//
#if DBG
#define IgmpAssert(exp){ \
if(!(exp)) \ { \ TracePrintf(TRACEID, \ "Assertion failed in %s : %d \n",__FILE__,__LINE__);\ RouterAssert(#exp,__FILE__,__LINE__,NULL); \ } \ } #else
#define IgmpAssert(exp)
#endif
|