|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
lookup.h
Abstract:
This module contains defines for a wrapper that integrates the trie lookup into TCPIP.
Author:
Chaitanya Kodeboyina (chaitk) 11-Dec-1997
Revision History:
--*/
#pragma once
#include "strie.h"
#include "ftrie.h"
// Global Externs
extern Trie *RouteTable;
// Wrapper Routines
/*++
Routine Description:
Initializes the IP Route Table
Arguments:
None
Return Value:
STATUS_SUCCESS or Error Code
--*/ #define InitRouteTable(initflags, levelsBmp, fastTrieMem, slowTrieMem) \
CreateTrie(levelsBmp, initflags, slowTrieMem, fastTrieMem, &RouteTable)
/*++
Routine Description:
Searches for a route given a prefix
The route returned is a Semi-Read- Only-Version. The following fields should be changed only by calling the InsRoute function - 1) Next, 2) Dest, 3) Mask, 4) Priority, & 5) Route Metric.
Remaining fields can be changed by directly modifying returned route.
Arguments:
IN - Dest - Destination IP Addr Mask - Destination IP Mask FirstHop - IP Addr of Next Hop OutIF - Outgoing Interface bFindFirst - Do not Match IF / not (for FindSpecificRTE) fMatchFlags - Route fields to match (for FindMatchingRTE)
OUT - PrevRTE - Value should be ignored
Return Value:
Matching RTE or NULL if not match
--*/ #define FindSpecificRTE(_Dest_, _Mask_, _FirstHop_, _OutIF_, _PrevRTE_, _bFindFirst_) \
((SearchRouteInTrie(RouteTable, _Dest_, _Mask_, _FirstHop_, _OutIF_, \ (!_bFindFirst_ * MATCH_INTF) | MATCH_NHOP, _PrevRTE_) \ == TRIE_SUCCESS) ? *_PrevRTE_ : NULL)
#define FindMatchingRTE(_Dest_, _Mask_, _FirstHop_, _OutIF_, _PrevRTE_, _fMatchFlags_) \
((SearchRouteInTrie(RouteTable, _Dest_, _Mask_, _FirstHop_, _OutIF_, \ _fMatchFlags_, _PrevRTE_) \ == TRIE_SUCCESS) ? *_PrevRTE_ : NULL)
/*
Routine Description:
Gets list of default routes in table.
The routes returned are a Semi-Read- Only-Version. The following fields should be changed only by calling the InsRoute function - 1) Next, 2) Dest, 3) Mask, 4) Priority, & 5) Route Metric.
Remaining fields can be changed by directly modifying returned route.
Replaces::
RouteTable[IPHash(0)] (or) RouteTable[0];
Arguments:
OUT - ppDefRoute - Ptr to Ptr to list of default routes.
Return Value:
Pointer to default routes, or NULL */ #define GetDefaultGWs(_ppDefRoute_) \
((SearchRouteInTrie(RouteTable, 0, 0, 0, NULL, MATCH_NONE, \ _ppDefRoute_) == TRIE_SUCCESS) ? *(_ppDefRoute_) : NULL)
/*++
Routine Description:
Frees memory for a route and adjusts some global statistics
Arguments:
IN - RTE - The RTE to be freed
Return Value:
None
--*/ #define CleanupRTE(_RTE_) DeleteRTE(NULL, _RTE_);
/*++
Routine Description:
Frees memory for a route
Arguments:
IN - RTE - The RTE to be freed
Return Value:
None
--*/ #define FreeRoute(_RTE_) FreeRouteInTrie(RouteTable, _RTE_);
//
// Wrapper Prototypes
//
UINT InsRoute(IPAddr Dest, IPMask Mask, IPAddr FirstHop, VOID *OutIF, UINT Metric, ULONG MatchFlags, RouteTableEntry **ppInsRTE, RouteTableEntry **ppOldBestRTE, RouteTableEntry **ppNewBestRTE);
UINT DelRoute(IPAddr Dest, IPMask Mask, IPAddr FirstHop, VOID *OutIF, ULONG MatchFlags, RouteTableEntry **ppDelRTE, RouteTableEntry **ppOldBestRTE, RouteTableEntry **ppNewBestRTE);
RouteTableEntry * FindRTE(IPAddr Dest, IPAddr Source, UINT Index, UINT MaxPri, UINT MinPri, UINT UnicastIf);
RouteTableEntry * LookupRTE(IPAddr Dest, IPAddr Source, UINT MaxPri, UINT UnicastIf);
RouteTableEntry * LookupForwardRTE(IPAddr Dest, IPAddr Source, BOOLEAN Multipath);
UINT GetNextRoute(VOID *Context, Route **ppRoute);
UINT GetNextDest(VOID *Context, Dest **ppDest);
VOID SortRoutesInDest(Dest *pDest);
VOID SortRoutesInDestByRTE(Route *pRTE);
UINT RTValidateContext(VOID *Context, UINT *Valid);
|