home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
include
/
routprot.h
< prev
next >
Wrap
C/C++ Source or Header
|
1998-04-25
|
14KB
|
528 lines
/*++
Copyright (c) 1995 - 1997 Microsoft Corporation
Module Name:
routprot.h
Abstract:
Include file for Routing Protocol inteface to Router Managers
--*/
#ifndef __ROUTING_ROUTPROT_H__
#define __ROUTING_ROUTPROT_H__
#include "stm.h"
#ifdef __cplusplus
extern "C" {
#endif
//////////////////////////////////////////////////////////////////////////////
// //
// Supported functionality flags //
// //
// ROUTING Imports Routing Table Manager APIs //
// SERVICES Exports Service Table Manager APIs //
// DEMAND_UPDATE_ROUTES IP and IPX RIP support for Autostatic //
// DEMAND_UPDATE_SERVICES IPX SAP, NLSP support for Autostatic //
// //
//////////////////////////////////////////////////////////////////////////////
#define ROUTING 0x00000001
#define DEMAND_UPDATE_ROUTES 0x00000004
#if MPR40
#define MS_ROUTER_VERSION 0x00000400
#else
#if MPR50
#define MS_ROUTER_VERSION 0x00000500
#else
#error Router version not defined
#endif
#endif
typedef enum _ROUTING_PROTOCOL_EVENTS
{
ROUTER_STOPPED, // Result is empty
SAVE_GLOBAL_CONFIG_INFO, // Result is empty
SAVE_INTERFACE_CONFIG_INFO, // Result is interface index
// for which config info is to be saved.
UPDATE_COMPLETE, // Result is UPDATE_COMPLETE_MESSAGE structure
}ROUTING_PROTOCOL_EVENTS;
typedef enum _NET_INTERFACE_TYPE
{
PERMANENT, // Permanent connectivity
// (LAN, Frame Relay, etc.)
DEMAND_DIAL, // Demand Dial connectivity
// (analog, ISDN, switched FR)
LOCAL_WORKSTATION_DIAL, // Local Workstation connectivity only
REMOTE_WORKSTATION_DIAL // Remote Workstation connectivity
} NET_INTERFACE_TYPE;
typedef struct _SUPPORT_FUNCTIONS
{
//
// Function called by routing protocol to initiate demand dial connection
//
OUT DWORD
(WINAPI *DemandDialRequest)(
IN DWORD ProtocolId,
IN DWORD InterfaceIndex
) ;
//
// The following entrypoints are provided as a way for getting
// information that spans components
//
OUT DWORD
(WINAPI *MIBEntryCreate)(
IN DWORD dwRoutingPid,
IN DWORD dwEntrySize,
IN LPVOID lpEntry
);
OUT DWORD
(WINAPI *MIBEntryDelete)(
IN DWORD dwRoutingPid,
IN DWORD dwEntrySize,
IN LPVOID lpEntry
);
OUT DWORD
(WINAPI *MIBEntrySet)(
IN DWORD dwRoutingPid,
IN DWORD dwEntrySize,
IN LPVOID lpEntry
);
OUT DWORD
(WINAPI *MIBEntryGet)(
IN DWORD dwRoutingPid,
IN DWORD dwInEntrySize,
IN LPVOID lpInEntry,
IN OUT LPDWORD lpOutEntrySize,
OUT LPVOID lpOutEntry );
OUT DWORD
(WINAPI *MIBEntryGetFirst)(
IN DWORD dwRoutingPid,
IN DWORD dwInEntrySize,
IN LPVOID lpInEntry,
IN OUT LPDWORD lpOutEntrySize,
OUT LPVOID lpOutEntry
);
OUT DWORD
(WINAPI *MIBEntryGetNext)(
IN DWORD dwRoutingPid,
IN DWORD dwInEntrySize,
IN LPVOID lpInEntry,
IN OUT LPDWORD lpOutEntrySize,
OUT LPVOID lpOutEntry
);
} SUPPORT_FUNCTIONS, *PSUPPORT_FUNCTIONS ;
//////////////////////////////////////////////////////////////////////////////
// //
// All IP Protocols must use the protocol ids defined in the range below. //
// Protocols not identified below can use any unassigned number BELOW //
// 0xffff0000 //
// //
// NOTE: These numbers have been chosen to coincide with MIB-II protocol //
// numbers. Allocation should not be arbitrary. //
// //
//////////////////////////////////////////////////////////////////////////////
#define IP_OTHER 1
#define IP_LOCAL 2
#define IP_NETMGMT 3
#define IP_ICMP 4
#define IP_EGP 5
#define IP_GGP 6
#define IP_HELLO 7
#define IP_RIP 8
#define IP_IS_IS 9
#define IP_ES_IS 10
#define IP_CISCO 11
#define IP_BBN 12
#define IP_OSPF 13
#define IP_BGP 14
//
// The IPRTRMGR_PID is 10000
//
#define IP_BOOTP 9999
#define IP_NT_AUTOSTATIC 10002
//
// For all future development, the following macro must be used to generate
// Ids
//
//
// Type - 4 bits,
// VendorMajor - 4 bits,
// VendorMinor - 8 bits,
// ProtocolId - 8 bits
//
#define PROTOCOL_ID(Type, VendorMajor, VendorMinor, Id) \
(((Type)<<28)|((VendorMajor)<<24)|((VendorMinor)<<16)|(Id))
//
// |----|----|----|----|----|----|----|----|
// Type VenMj VenMn 0000 0000 ProtocolId
//
#define PROTO_TYPE_UNICAST 0
#define PROTO_TYPE_MCAST 1
#define PROTO_VENDOR_MJ_IETF 0
#define PROTO_VENDOR_MN_IETF 0
#define PROTO_VENDOR_MJ_MS 15 // 0xF
//
// All IPX Protocols must use the protocol ids defined in the range below.
// Protocols not identified below can use any unassigned number greater than
// IPX_PROTOCOL_BASE.
//
#define IPX_PROTOCOL_BASE 0x0001ffff
#define IPX_PROTOCOL_RIP IPX_PROTOCOL_BASE + 1
#define IPX_PROTOCOL_SAP IPX_PROTOCOL_BASE + 2
#define IPX_PROTOCOL_NLSP IPX_PROTOCOL_BASE + 3
typedef struct _UPDATE_COMPLETE_MESSAGE
{
ULONG InterfaceIndex;
ULONG UpdateType; // DEMAND_UPDATE_ROUTES, DEMAND_UPDATE_SERVICES
ULONG UpdateStatus; // NO_ERROR if successfull
} UPDATE_COMPLETE_MESSAGE, *PUPDATE_COMPLETE_MESSAGE;
//
// Message returned in Result parameter to GET_EVENT_MESSAGE api call.
// UpdateCompleteMessage returned for UPDATE_COMPLETE message
// InterfaceIndex returned for SAVE_INTERFACE_CONFIG_INFO message
//
typedef union _MESSAGE
{
UPDATE_COMPLETE_MESSAGE UpdateCompleteMessage;
DWORD InterfaceIndex;
} MESSAGE, *PMESSAGE;
//
// IPX Adapter Binding Info - Used in ActivateInterface
//
typedef struct IPX_ADAPTER_BINDING_INFO
{
ULONG AdapterIndex;
UCHAR Network[4];
UCHAR LocalNode[6];
UCHAR RemoteNode[6];
ULONG MaxPacketSize;
ULONG LinkSpeed;
}IPX_ADAPTER_BINDING_INFO, *PIPX_ADAPTER_BINDING_INFO;
//
// IP Adapter Binding Info
//
typedef struct IP_LOCAL_BINDING
{
DWORD IPAddress;
DWORD Mask;
}IP_LOCAL_BINDING, *PIP_LOCAL_BINDING;
typedef struct IP_ADAPTER_BINDING_INFO
{
DWORD NumAddresses;
DWORD RemoteAddress;
IP_LOCAL_BINDING Address[1];
}IP_ADAPTER_BINDING_INFO, *PIP_ADAPTER_BINDING_INFO;
#define SIZEOF_IP_BINDING(X) \
(FIELD_OFFSET(IP_ADAPTER_BINDING_INFO,Address[0]) + \
((X) * sizeof(IP_LOCAL_BINDING)))
//
// Protocol Start/Stop Entry Points
//
typedef
DWORD
(WINAPI * PSTART_PROTOCOL) (
IN HANDLE NotificationEvent,
IN PSUPPORT_FUNCTIONS SupportFunctions,
IN LPVOID GlobalInfo
);
typedef
DWORD
(WINAPI * PSTOP_PROTOCOL) (
VOID
);
typedef
DWORD
(WINAPI * PADD_INTERFACE) (
IN LPWSTR InterfaceName,
IN ULONG InterfaceIndex,
IN NET_INTERFACE_TYPE InterfaceType,
IN PVOID InterfaceInfo
);
typedef
DWORD
(WINAPI * PDELETE_INTERFACE) (
IN ULONG InterfaceIndex
);
typedef
DWORD
(WINAPI * PGET_EVENT_MESSAGE) (
OUT ROUTING_PROTOCOL_EVENTS *Event,
OUT MESSAGE *Result
);
typedef
DWORD
(WINAPI * PGET_INTERFACE_INFO) (
IN ULONG InterfaceIndex,
IN PVOID InterfaceInfo,
IN OUT PULONG InterfaceInfoSize
);
typedef
DWORD
(WINAPI * PSET_INTERFACE_INFO) (
IN ULONG InterfaceIndex,
IN PVOID InterfaceInfo
);
typedef
DWORD
(WINAPI * PBIND_INTERFACE) (
IN ULONG InterfaceIndex,
IN PVOID BindingInfo
) ;
typedef
DWORD
(WINAPI * PUNBIND_INTERFACE) (
IN ULONG InterfaceIndex
);
typedef
DWORD
(WINAPI * PENABLE_INTERFACE) (
IN ULONG InterfaceIndex
) ;
typedef
DWORD
(WINAPI * PDISABLE_INTERFACE) (
IN ULONG InterfaceIndex
);
typedef
DWORD
(WINAPI * PGET_GLOBAL_INFO) (
IN PVOID GlobalInfo,
IN OUT PULONG GlobalInfoSize
);
typedef
DWORD
(WINAPI * PSET_GLOBAL_INFO) (
IN PVOID GlobalInfo
);
typedef
DWORD
(WINAPI * PDO_UPDATE_ROUTES) (
IN ULONG InterfaceIndex
);
typedef
DWORD
(WINAPI * PMIB_CREATE) (
IN ULONG InputDataSize,
IN PVOID InputData
);
typedef
DWORD
(WINAPI * PMIB_DELETE) (
IN ULONG InputDataSize,
IN PVOID InputData
);
typedef
DWORD
(WINAPI * PMIB_GET) (
IN ULONG InputDataSize,
IN PVOID InputData,
OUT PULONG OutputDataSize,
OUT PVOID OutputData
);
typedef
DWORD
(WINAPI * PMIB_SET) (
IN ULONG InputDataSize,
IN PVOID InputData
);
typedef
DWORD
(WINAPI * PMIB_GET_FIRST) (
IN ULONG InputDataSize,
IN PVOID InputData,
OUT PULONG OutputDataSize,
OUT PVOID OutputData
);
typedef
DWORD
(WINAPI * PMIB_GET_NEXT) (
IN ULONG InputDataSize,
IN PVOID InputData,
OUT PULONG OutputDataSize,
OUT PVOID OutputData
);
typedef
DWORD
(WINAPI * PMIB_SET_TRAP_INFO) (
IN HANDLE Event,
IN ULONG InputDataSize,
IN PVOID InputData,
OUT PULONG OutputDataSize,
OUT PVOID OutputData
);
typedef
DWORD
(WINAPI * PMIB_GET_TRAP_INFO) (
IN ULONG InputDataSize,
IN PVOID InputData,
OUT PULONG OutputDataSize,
OUT PVOID OutputData
);
//
// This is the structure passed between the router manager
// and a registering protocol.
//
// IN OUT DWORD dwVersion
// This is filled by the router manager to indicate the version it supports.
// The DLL MUST set this to the version that the protocol will support.
//
// IN DWORD dwProtocolId
// This the protocol the router manager is expecting the DLL to register.
// If the DLL does not support this protocol, it must return
// ERROR_NOT_SUPPORTED
// A DLL will be called once for every protocol it supports
//
// IN OUT DWORD fSupportedFunctionality
// These are the flags denoting the functionality the router manager
// supports. The DLL must reset this to the functionality that it
// supports
//
typedef struct _MPR40_ROUTING_CHARACTERISTICS
{
DWORD dwVersion;
DWORD dwProtocolId;
DWORD fSupportedFunctionality;
PSTART_PROTOCOL pfnStartProtocol;
PSTOP_PROTOCOL pfnStopProtocol;
PADD_INTERFACE pfnAddInterface;
PDELETE_INTERFACE pfnDeleteInterface;
PGET_EVENT_MESSAGE pfnGetEventMessage;
PGET_INTERFACE_INFO pfnGetInterfaceInfo;
PSET_INTERFACE_INFO pfnSetInterfaceInfo;
PBIND_INTERFACE pfnBindInterface;
PUNBIND_INTERFACE pfnUnbindInterface;
PENABLE_INTERFACE pfnEnableInterface;
PDISABLE_INTERFACE pfnDisableInterface;
PGET_GLOBAL_INFO pfnGetGlobalInfo;
PSET_GLOBAL_INFO pfnSetGlobalInfo;
PDO_UPDATE_ROUTES pfnUpdateRoutes;
PMIB_CREATE pfnMibCreateEntry;
PMIB_DELETE pfnMibDeleteEntry;
PMIB_GET pfnMibGetEntry;
PMIB_SET pfnMibSetEntry;
PMIB_GET_FIRST pfnMibGetFirstEntry;
PMIB_GET_NEXT pfnMibGetNextEntry;
PMIB_SET_TRAP_INFO pfnMibSetTrapInfo;
PMIB_GET_TRAP_INFO pfnMibGetTrapInfo;
}MPR40_ROUTING_CHARACTERISTICS;
typedef struct _MPR50_ROUTING_CHARACTERISTICS
{
#ifdef __cplusplus
MPR40_ROUTING_CHARACTERISTICS mrcMpr40Chars;
#else
MPR40_ROUTING_CHARACTERISTICS;
#endif
}MPR50_ROUTING_CHARACTERISTICS;
#if MPR50
typedef MPR50_ROUTING_CHARACTERISTICS MPR_ROUTING_CHARACTERISTICS;
#else
#if MPR40
typedef MPR40_ROUTING_CHARACTERISTICS MPR_ROUTING_CHARACTERISTICS;
#endif
#endif
typedef MPR_ROUTING_CHARACTERISTICS *PMPR_ROUTING_CHARACTERISTICS;
//
// All routing protocols must export the following entry point.
// The router manager calls this function to allow the routing
// protocol to register
//
#define REGISTER_PROTOCOL_ENTRY_POINT RegisterProtocol
#define REGISTER_PROTOCOL_ENTRY_POINT_STRING "RegisterProtocol"
typedef
DWORD
(WINAPI * PREGISTER_PROTOCOL) (
IN OUT PMPR_ROUTING_CHARACTERISTICS pRoutingChar,
IN OUT PMPR_SERVICE_CHARACTERISTICS pServiceChar
);
#ifdef __cplusplus
}
#endif
#endif //__ROUTING_ROUTPROT_H__