📄 routprot.h
字号:
/*++
Copyright (c) 1995-1999 Microsoft Corporation
Module Name:
routprot.h
Abstract:
Include file for Routing Protocol inteface to Router Managers
--*/
#ifndef _ROUTPROT_H_
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define _ROUTPROT_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include "stm.h"
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning(disable:4201)
#pragma warning(disable:4200)
#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 //
// ADD_ALL_INTERFACES Adds all interfaces, even if no info is present //
// MULTICAST Supports multicast //
// POWER Power Manageable //
// //
//////////////////////////////////////////////////////////////////////////////
#define RF_ROUTING 0x00000001
#define RF_DEMAND_UPDATE_ROUTES 0x00000004
#define RF_ADD_ALL_INTERFACES 0x00000010
#define RF_MULTICAST 0x00000020
#define RF_POWER 0x00000040
#if MPR50
#define MS_ROUTER_VERSION 0x00000500
#else
#error Router version not defined
#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,
DEMAND_DIAL,
LOCAL_WORKSTATION_DIAL,
REMOTE_WORKSTATION_DIAL
} NET_INTERFACE_TYPE;
//
// Interface Receive Types
//
#define IR_PROMISCUOUS 0
#define IR_PROMISCUOUS_MULTICAST 1
typedef struct _SUPPORT_FUNCTIONS
{
union
{
ULONGLONG _Align8;
struct
{
DWORD dwVersion;
DWORD dwReserved;
};
};
//
// Function called by routing protocol to initiate demand dial connection
//
OUT DWORD
(WINAPI *DemandDialRequest)(
IN DWORD ProtocolId,
IN DWORD InterfaceIndex
) ;
//
// Can be called to set the interface's receive capability
// See IR_Xxx values above
//
OUT DWORD
(WINAPI *SetInterfaceReceiveType)(
IN DWORD ProtocolId,
IN DWORD InterfaceIndex,
IN DWORD InterfaceReceiveType,
IN BOOL bActivate
);
//
// Must be called by every protocol to set the route preference
// and perform other validation
//
OUT DWORD
(WINAPI *ValidateRoute)(
IN DWORD ProtocolId,
IN PVOID RouteInfo,
IN PVOID DestAddress OPTIONAL
);
//
// 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 PROTO_IP_OTHER 1
#define PROTO_IP_LOCAL 2
#define PROTO_IP_NETMGMT 3
#define PROTO_IP_ICMP 4
#define PROTO_IP_EGP 5
#define PROTO_IP_GGP 6
#define PROTO_IP_HELLO 7
#define PROTO_IP_RIP 8
#define PROTO_IP_IS_IS 9
#define PROTO_IP_ES_IS 10
#define PROTO_IP_CISCO 11
#define PROTO_IP_BBN 12
#define PROTO_IP_OSPF 13
#define PROTO_IP_BGP 14
//
// The multicast protocol IDs
//
#define PROTO_IP_IGMP 10
#define PROTO_IP_BGMP 11
//
// The IPRTRMGR_PID is 10000 // 0x00002710
//
#define PROTO_IP_VRRP 112
#define PROTO_IP_BOOTP 9999 // 0x0000270F
#define PROTO_IP_NT_AUTOSTATIC 10002 // 0x00002712
#define PROTO_IP_DNS_PROXY 10003 // 0x00002713
#define PROTO_IP_DHCP_ALLOCATOR 10004 // 0x00002714
#define PROTO_IP_NAT 10005 // 0x00002715
#define PROTO_IP_NT_STATIC 10006 // 0x00002716
#define PROTO_IP_NT_STATIC_NON_DOD 10007 // 0x00002717
#define PROTO_IP_DIFFSERV 10008 // 0x00002718
#define PROTO_IP_MGM 10009 // 0x00002719
#define PROTO_IP_DTP 10010 // 0x0000271A
#define PROTO_IP_H323 10011 // 0x0000271B
//
// For all future development, the following macro must be used to generate
// Ids
//
//
// Type - 2 bits
// Vendor - 14 bits
// ProtocolId - 16 bits
//
#define PROTOCOL_ID(Type, VendorId, ProtocolId) \
(((Type & 0x03)<<30)|((VendorId & 0x3FFF)<<16)|(ProtocolId & 0xFFFF))
//
// |----|----|----|----|----|----|----|----|
// Ty*** Vendor Id *** StandardProtocolId
//
#define TYPE_FROM_PROTO_ID(X) (((X) >> 30) & 0x03)
#define VENDOR_FROM_PROTO_ID(X) (((X) >> 16) & 0x3FFF)
#define PROTO_FROM_PROTO_ID(X) ((X) & 0xFFFF)
//
// Types MS0 and MS1 are Microsoft Reserved
// A protocol that supports both unicast and multicast should use type
// MCAST
//
#define PROTO_TYPE_UCAST 0
#define PROTO_TYPE_MCAST 1
#define PROTO_TYPE_MS0 2
#define PROTO_TYPE_MS1 3
#define PROTO_VENDOR_MS0 0x0000
#define PROTO_VENDOR_MS1 0x137 // 311
#define PROTO_VENDOR_MS2 0x3FFF
#define MS_IP_BOOTP \
PROTOCOL_ID(PROTO_TYPE_UCAST, PROTO_VENDOR_MS0, PROTO_IP_BOOTP)
#define MS_IP_RIP \
PROTOCOL_ID(PROTO_TYPE_UCAST, PROTO_VENDOR_MS0, PROTO_IP_RIP)
#define MS_IP_OSPF \
PROTOCOL_ID(PROTO_TYPE_UCAST, PROTO_VENDOR_MS0, PROTO_IP_OSPF)
#define MS_IP_BGP \
PROTOCOL_ID(PROTO_TYPE_UCAST, PROTO_VENDOR_MS1, PROTO_IP_BGP)
#define MS_IP_IGMP \
PROTOCOL_ID(PROTO_TYPE_MCAST, PROTO_VENDOR_MS1, PROTO_IP_IGMP)
#define MS_IP_BGMP \
PROTOCOL_ID(PROTO_TYPE_MCAST, PROTO_VENDOR_MS1, PROTO_IP_BGMP)
#define MS_IP_DNS_PROXY \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_DNS_PROXY)
#define MS_IP_DHCP_ALLOCATOR \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_DHCP_ALLOCATOR)
#define MS_IP_NAT \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_NAT)
#define MS_IP_DIFFSERV \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_DIFFSERV)
#define MS_IP_MGM \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_MGM)
#define MS_IP_VRRP \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_VRRP)
#define MS_IP_DTP \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_DTP)
#define MS_IP_H323 \
PROTOCOL_ID(PROTO_TYPE_MS0, PROTO_VENDOR_MS1, PROTO_IP_H323)
//
// 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;
//
// Routing Interface Status types
//
#define RIS_INTERFACE_ADDRESS_CHANGE 0
#define RIS_INTERFACE_ENABLED 1
#define RIS_INTERFACE_DISABLED 2
#define RIS_INTERFACE_MEDIA_PRESENT 3
#define RIS_INTERFACE_MEDIA_ABSENT 4
//
// IPX Adapter Binding Info
//
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
// This is the information associated with an ADDRESS_ARRIVAL event
// An address arrival may have AddressCount == 0, this implies a unnumbered
// interface
//
typedef struct IP_LOCAL_BINDING
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -