windows-nt/Source/XPSP1/NT/net/rras/rtmv2/apitest.h
2020-09-26 16:20:57 +08:00

236 lines
5.8 KiB
C

/*++
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 <winsock2.h>
#include <routprot.h>
#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