Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (c) 1995-1998 Microsoft Corporation
Module Name:
lkuptst.h
Abstract: Contains routines for testing an implementation for the generalized best matching prefix lookup interface.
Author: Chaitanya Kodeboyina (chaitk) 30-Jun-1998
Revision History:
--*/
#ifndef __LKUPTST_H
#define __LKUPTST_H
#include "lookup.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 MAXROUTES 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
// 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 Error(S, E) { \
fprintf(stderr, S, E); \ }
#define Fatal(S, E) { \
fprintf(stderr, S, E); \ exit(E); \ }
#define ClearMemory(pm, nb) memset((pm), 0, (nb))
#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
// Route Structures
typedef ULONG IPAddr; typedef ULONG IPMask;
// A Route Corr. to a Prefix
typedef struct _Route Route;
struct _Route { IPAddr addr; // ULONG (32 bits) representing addr
IPMask mask; // ULONG (32 bits) representing mask
IPAddr nexthop; // ULONG (32 bits) for next hop addr
USHORT len; // Num of bits in the address route
UINT metric; // A measure to compare routes with
PVOID interface; // Interface on which packet is sent
LOOKUP_LINKAGE backptr; // Points back to the lookup structure
};
// Route Macros
#define DEST(_pRoute_) ((_pRoute_)->addr)
#define MASK(_pRoute_) ((_pRoute_)->mask)
#define NHOP(_pRoute_) ((_pRoute_)->nexthop)
#define LEN(_pRoute_) ((_pRoute_)->len)
#define METRIC(_pRoute_) ((_pRoute_)->metric)
#define IF(_pRoute_) ((_pRoute_)->interface)
#define NULL_ROUTE(_pRoute_) (_pRoute_ == NULL)
// Prototypes
DWORD WorkOnLookup ( IN Route *InputRoutes, IN UINT NumRoutes );
VOID ReadAddrAndGetRoute ( IN PVOID Table );
VOID EnumerateAllRoutes ( IN PVOID Table );
UINT ReadRoutesFromFile( IN FILE *FilePtr, IN UINT NumRoutes, OUT Route *RouteTable );
INT ReadRoute ( IN FILE *FilePtr, OUT Route *route );
VOID PrintRoute ( IN Route *route );
INT ReadIPAddr ( IN FILE *FilePtr, OUT ULONG *addr );
VOID PrintIPAddr ( IN ULONG *addr );
VOID Usage ( VOID );
#endif // __LKUPTST_H
|