/*++ Copyright (c) 1995-1998 Microsoft Corporation Module Name: apitest.h Abstract: Contains defines for testing the RTMv2 API. Author: Chaitanya Kodeboyina (chaitk) 26-Aug-1998 Revision History: --*/ #ifndef __APITEST_H #define __APITEST_H #include #include #include "rtmv2.h" #include "rtmcnfg.h" #include "rtmmgmt.h" #include "rtm.h" #include "rmrtm.h" // // Constants // #define MAX_FNAME_LEN 255 #define MAX_LINE_LEN 255 #define BITSINBYTE 8 #define ADDRSIZE 32 #define NUMBYTES 4 #define MAXLEVEL 32 #define MAX_INSTANCES 10 #define MAX_ADDR_FAMS 10 #define MAX_ENTITIES 10 #define MAX_METHODS 10 #define MAX_HANDLES 25 #define MAX_ROUTES 64000 #define ERROR_IPLMISC_BASE -100 #define ERROR_WRONG_CMDUSAGE ERROR_IPLMISC_BASE - 1 #define ERROR_OPENING_DATABASE ERROR_IPLMISC_BASE - 2 #define ERROR_MAX_NUM_ROUTES ERROR_IPLMISC_BASE - 3 // // Structures // // Set of exported entity methods (a copy of one in rtmv2.h - but with const 7) typedef struct _MY_ENTITY_EXPORT_METHODS { USHORT NumMethods; RTM_ENTITY_EXPORT_METHOD Methods[7]; } MY_ENTITY_EXPORT_METHODS, *PMY_ENTITY_EXPORT_METHODS; // A structure that represents all entity properties typedef struct _ENTITY_CHARS { BOOL Rtmv2Registration; RTM_ENTITY_INFO EntityInformation; RTM_EVENT_CALLBACK EventCallback; PMY_ENTITY_EXPORT_METHODS ExportMethods; CHAR RoutesFileName[MAX_FNAME_LEN]; RTM_REGN_PROFILE RegnProfile; ULONGLONG TotalChangedDests; } ENTITY_CHARS, *PENTITY_CHARS; // // Useful Misc Macros // #define FHalf(B) (B) >> 4 #define BHalf(B) (B) & 0xF #define Print printf #define Assert(S) assert(S) #define SUCCESS(S) (S == NO_ERROR) #define ErrorF(S, F, E) { \ fprintf(stderr, S, F, E); \ DebugBreak(); \ } #define FatalF(S, F, E) { \ ErrorF(S, F, E); \ exit(E); \ } #define Check(E, F) { \ if (!SUCCESS(E)) \ { \ FatalF("-%2d- failed with status %lu\n",F,E);\ } \ } #define ClearMemory(pm, nb) memset((pm), 0, (nb)) // // Profiling Macros // #if PROF #define PROFVARS LARGE_INTEGER PCStart; /* PerformanceCountStart */ \ LARGE_INTEGER PCStop; /* PerformanceCountStop */ \ LARGE_INTEGER PCFreq; /* PerformanceCountFreq */ \ double timer; \ double duration; \ \ QueryPerformanceFrequency(&PCFreq); \ // Print("Perf Counter Resolution = %.3f ns\n\n", \ // (double) 1000 * 1000 * 1000 / PCFreq.QuadPart); #define STARTPROF QueryPerformanceCounter(&PCStart); #define STOPPROF QueryPerformanceCounter(&PCStop); #define INITPROF duration = 0; #define ADDPROF timer = (double)(PCStop.QuadPart - PCStart.QuadPart) \ * 1000 * 1000 * 1000 / PCFreq.QuadPart; \ duration += timer; \ // Print("Add : %.3f ns\n\n", timer); #define SUBPROF timer = (double)(PCStop.QuadPart - PCStart.QuadPart) \ * 1000 * 1000 * 1000 / PCFreq.QuadPart; \ duration -= timer; \ // Print("Sub : %.3f ns\n\n", timer); #define PRINTPROF // Print("Total Time Taken To Finish : %.3f ns\n", \ // duration); #endif // if PROF // // Other Misc Macros // // Macro to allocate a RTM_DEST_INFO on the stack #define ALLOC_RTM_DEST_INFO(NumViews, NumInfos) \ (PRTM_DEST_INFO) _alloca(RTM_SIZE_OF_DEST_INFO(NumViews) * NumInfos) // // Prototypes // DWORD Rtmv1EntityThreadProc ( IN LPVOID ThreadParam ); DWORD ValidateRouteCallback( IN PVOID Route ); VOID RouteChangeCallback( IN DWORD Flags, IN PVOID CurBestRoute, IN PVOID PrevBestRoute ); VOID ConvertRouteToV1Route ( IN Route *ThisRoute, OUT RTM_IP_ROUTE *V1Route ); VOID ConvertV1RouteToRoute ( IN RTM_IP_ROUTE *V1Route, OUT Route *ThisRoute ); DWORD Rtmv2EntityThreadProc ( IN LPVOID ThreadParam ); DWORD EntityEventCallback ( IN RTM_ENTITY_HANDLE RtmRegHandle, IN RTM_EVENT_TYPE EventType, IN PVOID Context1, IN PVOID Context2 ); VOID EntityExportMethod ( IN RTM_ENTITY_HANDLE CallerHandle, IN RTM_ENTITY_HANDLE CalleeHandle, IN RTM_ENTITY_METHOD_INPUT *Input, OUT RTM_ENTITY_METHOD_OUTPUT *Output ); #endif // __APITEST_H