home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / routprot.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  14KB  |  528 lines

  1. /*++
  2.  
  3. Copyright (c) 1995 - 1997 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     routprot.h
  8.  
  9. Abstract:
  10.     Include file for Routing Protocol inteface to Router Managers
  11.  
  12. --*/
  13.  
  14. #ifndef __ROUTING_ROUTPROT_H__
  15. #define __ROUTING_ROUTPROT_H__
  16.  
  17. #include "stm.h"
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. //////////////////////////////////////////////////////////////////////////////
  24. //                                                                          //
  25. // Supported functionality flags                                            //
  26. //                                                                          //
  27. // ROUTING                     Imports Routing Table Manager APIs              //
  28. // SERVICES                    Exports Service Table Manager APIs              //
  29. // DEMAND_UPDATE_ROUTES     IP and IPX RIP support for Autostatic           //
  30. // DEMAND_UPDATE_SERVICES   IPX SAP, NLSP support for Autostatic            //
  31. //                                                                          //
  32. //////////////////////////////////////////////////////////////////////////////
  33.  
  34. #define ROUTING                 0x00000001
  35. #define DEMAND_UPDATE_ROUTES    0x00000004
  36.  
  37. #if MPR40
  38. #define MS_ROUTER_VERSION       0x00000400
  39. #else
  40.     #if MPR50
  41.     #define MS_ROUTER_VERSION       0x00000500
  42.     #else
  43.     #error Router version not defined
  44.     #endif
  45. #endif
  46.  
  47. typedef enum _ROUTING_PROTOCOL_EVENTS
  48. {
  49.     ROUTER_STOPPED,              // Result is empty
  50.     SAVE_GLOBAL_CONFIG_INFO,     // Result is empty
  51.     SAVE_INTERFACE_CONFIG_INFO,  // Result is interface index
  52.                                  // for which config info is to be saved.
  53.     UPDATE_COMPLETE,             // Result is UPDATE_COMPLETE_MESSAGE structure
  54. }ROUTING_PROTOCOL_EVENTS;
  55.  
  56.  
  57. typedef enum _NET_INTERFACE_TYPE
  58. {
  59.     PERMANENT,                   // Permanent connectivity
  60.                                  // (LAN, Frame Relay, etc.)
  61.     DEMAND_DIAL,                 // Demand Dial connectivity
  62.                                  // (analog, ISDN, switched FR)
  63.     LOCAL_WORKSTATION_DIAL,         // Local Workstation connectivity only
  64.     REMOTE_WORKSTATION_DIAL      // Remote Workstation connectivity
  65. } NET_INTERFACE_TYPE;
  66.  
  67. typedef struct _SUPPORT_FUNCTIONS
  68. {
  69.     //
  70.     // Function called by routing protocol to initiate demand dial connection
  71.     //
  72.  
  73.     OUT DWORD
  74.     (WINAPI *DemandDialRequest)(
  75.         IN      DWORD           ProtocolId,
  76.         IN      DWORD           InterfaceIndex
  77.         ) ;
  78.  
  79.     //
  80.     // The following entrypoints are provided as a way for getting 
  81.     // information that spans components
  82.     //
  83.  
  84.     OUT DWORD
  85.     (WINAPI *MIBEntryCreate)(
  86.         IN      DWORD           dwRoutingPid,
  87.         IN      DWORD           dwEntrySize,
  88.         IN      LPVOID          lpEntry 
  89.         );
  90.  
  91.     OUT DWORD
  92.     (WINAPI *MIBEntryDelete)(
  93.         IN      DWORD           dwRoutingPid,
  94.         IN      DWORD           dwEntrySize,
  95.         IN      LPVOID          lpEntry 
  96.         );
  97.  
  98.     OUT DWORD
  99.     (WINAPI *MIBEntrySet)(
  100.         IN      DWORD           dwRoutingPid,
  101.         IN      DWORD           dwEntrySize,
  102.         IN      LPVOID          lpEntry 
  103.         );
  104.  
  105.     OUT DWORD
  106.     (WINAPI *MIBEntryGet)(
  107.         IN      DWORD           dwRoutingPid,
  108.         IN      DWORD           dwInEntrySize,
  109.         IN      LPVOID          lpInEntry,
  110.         IN OUT  LPDWORD         lpOutEntrySize,
  111.         OUT     LPVOID          lpOutEntry );
  112.  
  113.     OUT DWORD
  114.     (WINAPI *MIBEntryGetFirst)(
  115.         IN      DWORD           dwRoutingPid,
  116.         IN      DWORD           dwInEntrySize,
  117.         IN      LPVOID          lpInEntry,
  118.         IN OUT  LPDWORD         lpOutEntrySize,
  119.         OUT     LPVOID          lpOutEntry 
  120.         );
  121.  
  122.     OUT DWORD
  123.     (WINAPI *MIBEntryGetNext)(
  124.         IN      DWORD           dwRoutingPid,
  125.         IN      DWORD           dwInEntrySize,
  126.         IN      LPVOID          lpInEntry,
  127.         IN OUT  LPDWORD         lpOutEntrySize,
  128.         OUT     LPVOID          lpOutEntry 
  129.         );
  130.  
  131. } SUPPORT_FUNCTIONS, *PSUPPORT_FUNCTIONS ;
  132.  
  133.  
  134. //////////////////////////////////////////////////////////////////////////////
  135. //                                                                          //
  136. // All IP Protocols must use the protocol ids defined in the range below.   //
  137. // Protocols not identified below can use any unassigned number BELOW       //
  138. // 0xffff0000                                                               //
  139. //                                                                          //
  140. // NOTE: These numbers have been chosen to coincide with MIB-II protocol    //
  141. // numbers. Allocation should not be arbitrary.                             //
  142. //                                                                          //
  143. //////////////////////////////////////////////////////////////////////////////
  144.  
  145. #define IP_OTHER        1
  146. #define IP_LOCAL        2
  147. #define IP_NETMGMT        3
  148. #define IP_ICMP            4
  149. #define IP_EGP            5
  150. #define IP_GGP            6
  151. #define IP_HELLO        7
  152. #define IP_RIP            8
  153. #define IP_IS_IS        9
  154. #define IP_ES_IS        10
  155. #define IP_CISCO        11
  156. #define IP_BBN            12
  157. #define IP_OSPF            13
  158. #define IP_BGP            14
  159.  
  160. //
  161. // The IPRTRMGR_PID is 10000
  162. //
  163.  
  164. #define IP_BOOTP            9999
  165. #define IP_NT_AUTOSTATIC    10002
  166.  
  167. //
  168. // For all future development, the following macro must be used to generate
  169. // Ids
  170. //
  171.  
  172. //
  173. //  Type            -   4 bits,
  174. //  VendorMajor     -   4 bits,
  175. //  VendorMinor     -   8 bits,
  176. //  ProtocolId      -   8 bits
  177. //
  178.  
  179. #define PROTOCOL_ID(Type, VendorMajor, VendorMinor, Id) \
  180.     (((Type)<<28)|((VendorMajor)<<24)|((VendorMinor)<<16)|(Id))
  181.  
  182. //
  183. //  |----|----|----|----|----|----|----|----|
  184. //   Type VenMj VenMn    0000 0000 ProtocolId
  185. //
  186.  
  187.  
  188.  
  189. #define PROTO_TYPE_UNICAST          0
  190. #define PROTO_TYPE_MCAST            1
  191.  
  192. #define PROTO_VENDOR_MJ_IETF        0
  193. #define PROTO_VENDOR_MN_IETF        0
  194. #define PROTO_VENDOR_MJ_MS          15  // 0xF
  195.  
  196.  
  197. //
  198. // All IPX Protocols must use the protocol ids defined in the range below.
  199. // Protocols not identified below can use any unassigned number greater than
  200. // IPX_PROTOCOL_BASE.
  201. //
  202.  
  203. #define IPX_PROTOCOL_BASE   0x0001ffff
  204. #define IPX_PROTOCOL_RIP    IPX_PROTOCOL_BASE + 1
  205. #define IPX_PROTOCOL_SAP    IPX_PROTOCOL_BASE + 2
  206. #define IPX_PROTOCOL_NLSP   IPX_PROTOCOL_BASE + 3
  207.  
  208. typedef struct _UPDATE_COMPLETE_MESSAGE
  209. {
  210.     ULONG    InterfaceIndex;
  211.     ULONG    UpdateType;           // DEMAND_UPDATE_ROUTES, DEMAND_UPDATE_SERVICES
  212.     ULONG    UpdateStatus;       // NO_ERROR if successfull
  213.  
  214. }   UPDATE_COMPLETE_MESSAGE, *PUPDATE_COMPLETE_MESSAGE;
  215.  
  216. //
  217. //  Message returned in Result parameter to GET_EVENT_MESSAGE api call.
  218. //  UpdateCompleteMessage   returned for UPDATE_COMPLETE message
  219. //  InterfaceIndex          returned for SAVE_INTERFACE_CONFIG_INFO message
  220. //
  221.  
  222. typedef union _MESSAGE
  223. {
  224.     UPDATE_COMPLETE_MESSAGE UpdateCompleteMessage;
  225.     DWORD                   InterfaceIndex;
  226.  
  227. }   MESSAGE, *PMESSAGE;
  228.  
  229. //
  230. //     IPX Adapter Binding Info - Used in ActivateInterface
  231. //
  232.  
  233. typedef struct    IPX_ADAPTER_BINDING_INFO
  234. {
  235.     ULONG    AdapterIndex;
  236.     UCHAR    Network[4];
  237.     UCHAR    LocalNode[6];
  238.     UCHAR    RemoteNode[6];
  239.     ULONG    MaxPacketSize;
  240.     ULONG    LinkSpeed;
  241.  
  242. }IPX_ADAPTER_BINDING_INFO, *PIPX_ADAPTER_BINDING_INFO;
  243.  
  244. //
  245. //     IP Adapter Binding Info
  246. //
  247.  
  248. typedef struct IP_LOCAL_BINDING
  249. {
  250.     DWORD   IPAddress;
  251.     DWORD   Mask;
  252. }IP_LOCAL_BINDING, *PIP_LOCAL_BINDING;
  253.  
  254. typedef struct    IP_ADAPTER_BINDING_INFO
  255. {
  256.     DWORD               NumAddresses;
  257.     DWORD               RemoteAddress;
  258.     IP_LOCAL_BINDING    Address[1];
  259. }IP_ADAPTER_BINDING_INFO, *PIP_ADAPTER_BINDING_INFO;
  260.  
  261. #define SIZEOF_IP_BINDING(X)                                \
  262.     (FIELD_OFFSET(IP_ADAPTER_BINDING_INFO,Address[0]) +     \
  263.      ((X) * sizeof(IP_LOCAL_BINDING)))
  264.  
  265.  
  266. //
  267. //  Protocol Start/Stop Entry Points
  268. //
  269.  
  270.  
  271. typedef
  272. DWORD
  273. (WINAPI * PSTART_PROTOCOL) (
  274.     IN HANDLE                 NotificationEvent,
  275.     IN PSUPPORT_FUNCTIONS   SupportFunctions,
  276.     IN LPVOID               GlobalInfo
  277.     );
  278.  
  279. typedef
  280. DWORD
  281. (WINAPI * PSTOP_PROTOCOL) (
  282.     VOID
  283.     );
  284.  
  285. typedef
  286. DWORD
  287. (WINAPI * PADD_INTERFACE) (
  288.     IN LPWSTR               InterfaceName,
  289.     IN ULONG                InterfaceIndex,
  290.     IN NET_INTERFACE_TYPE   InterfaceType,
  291.     IN PVOID                InterfaceInfo
  292.     );
  293.  
  294. typedef
  295. DWORD
  296. (WINAPI * PDELETE_INTERFACE) (
  297.     IN ULONG    InterfaceIndex
  298.     );
  299.  
  300. typedef
  301. DWORD
  302. (WINAPI * PGET_EVENT_MESSAGE) (
  303.     OUT ROUTING_PROTOCOL_EVENTS  *Event,
  304.     OUT MESSAGE                  *Result
  305.     );
  306.  
  307. typedef
  308. DWORD
  309. (WINAPI * PGET_INTERFACE_INFO) (
  310.     IN      ULONG    InterfaceIndex,
  311.     IN      PVOID   InterfaceInfo,
  312.     IN OUT PULONG    InterfaceInfoSize
  313.     );
  314.  
  315. typedef
  316. DWORD
  317. (WINAPI * PSET_INTERFACE_INFO) (
  318.     IN ULONG    InterfaceIndex,
  319.     IN PVOID    InterfaceInfo
  320.     );
  321.  
  322. typedef
  323. DWORD
  324. (WINAPI * PBIND_INTERFACE) (
  325.     IN ULONG    InterfaceIndex,
  326.     IN PVOID    BindingInfo
  327.     ) ;
  328.  
  329. typedef
  330. DWORD
  331. (WINAPI * PUNBIND_INTERFACE) (
  332.     IN ULONG    InterfaceIndex
  333.     );
  334.  
  335. typedef
  336. DWORD
  337. (WINAPI * PENABLE_INTERFACE) (
  338.     IN ULONG    InterfaceIndex
  339.     ) ;
  340.  
  341. typedef
  342. DWORD
  343. (WINAPI * PDISABLE_INTERFACE) (
  344.     IN ULONG    InterfaceIndex
  345.     );
  346.  
  347. typedef
  348. DWORD
  349. (WINAPI * PGET_GLOBAL_INFO) (
  350.     IN     PVOID     GlobalInfo,
  351.     IN OUT PULONG   GlobalInfoSize
  352.     );
  353.  
  354. typedef
  355. DWORD
  356. (WINAPI * PSET_GLOBAL_INFO) (
  357.     IN PVOID     GlobalInfo
  358.     );
  359.  
  360. typedef
  361. DWORD
  362. (WINAPI * PDO_UPDATE_ROUTES) (
  363.     IN ULONG    InterfaceIndex
  364.     );
  365.  
  366. typedef
  367. DWORD
  368. (WINAPI * PMIB_CREATE) (
  369.     IN ULONG     InputDataSize,
  370.     IN PVOID     InputData
  371.     );
  372.  
  373. typedef
  374. DWORD
  375. (WINAPI * PMIB_DELETE) (
  376.     IN ULONG     InputDataSize,
  377.     IN PVOID     InputData
  378.     );
  379.  
  380. typedef
  381. DWORD
  382. (WINAPI * PMIB_GET) (
  383.     IN  ULONG    InputDataSize,
  384.     IN  PVOID    InputData,
  385.     OUT PULONG    OutputDataSize,
  386.     OUT PVOID    OutputData
  387.     );
  388.  
  389. typedef
  390. DWORD
  391. (WINAPI * PMIB_SET) (
  392.     IN ULONG     InputDataSize,
  393.     IN PVOID    InputData
  394.     );
  395.  
  396. typedef
  397. DWORD
  398. (WINAPI * PMIB_GET_FIRST) (
  399.     IN  ULONG    InputDataSize,
  400.     IN  PVOID    InputData,
  401.     OUT PULONG  OutputDataSize,
  402.     OUT PVOID   OutputData
  403.     );
  404.  
  405. typedef
  406. DWORD
  407. (WINAPI * PMIB_GET_NEXT) (
  408.     IN  ULONG   InputDataSize,
  409.     IN  PVOID    InputData,
  410.     OUT PULONG  OutputDataSize,
  411.     OUT PVOID    OutputData
  412.     );
  413.  
  414. typedef
  415. DWORD
  416. (WINAPI * PMIB_SET_TRAP_INFO) (
  417.     IN  HANDLE  Event,
  418.     IN  ULONG   InputDataSize,
  419.     IN  PVOID    InputData,
  420.     OUT PULONG    OutputDataSize,
  421.     OUT PVOID    OutputData
  422.     );
  423.  
  424. typedef
  425. DWORD
  426. (WINAPI * PMIB_GET_TRAP_INFO) (
  427.     IN  ULONG    InputDataSize,
  428.     IN  PVOID    InputData,
  429.     OUT PULONG  OutputDataSize,
  430.     OUT PVOID    OutputData
  431.     );
  432.  
  433.  
  434. //
  435. // This is the structure passed between the router manager
  436. // and a registering protocol.
  437. //
  438. // IN OUT DWORD dwVersion
  439. // This is filled by the router manager to indicate the version it supports.
  440. // The DLL MUST set this to the version that the protocol will support.
  441. //
  442. // IN DWORD dwProtocolId
  443. // This the protocol the router manager is expecting the DLL to register.
  444. // If the DLL does not support this protocol, it must return
  445. // ERROR_NOT_SUPPORTED
  446. // A DLL will be called once for every protocol it supports
  447. //
  448. // IN OUT DWORD fSupportedFunctionality
  449. // These are the flags denoting the functionality the router manager
  450. // supports. The DLL must reset this to the functionality that it
  451. // supports
  452. //
  453.  
  454.  
  455. typedef struct _MPR40_ROUTING_CHARACTERISTICS
  456. {
  457.     DWORD               dwVersion;
  458.     DWORD               dwProtocolId;
  459.     DWORD               fSupportedFunctionality;
  460.     PSTART_PROTOCOL     pfnStartProtocol;
  461.     PSTOP_PROTOCOL      pfnStopProtocol;
  462.     PADD_INTERFACE      pfnAddInterface;
  463.     PDELETE_INTERFACE   pfnDeleteInterface;
  464.     PGET_EVENT_MESSAGE  pfnGetEventMessage;
  465.     PGET_INTERFACE_INFO pfnGetInterfaceInfo;
  466.     PSET_INTERFACE_INFO pfnSetInterfaceInfo;
  467.     PBIND_INTERFACE     pfnBindInterface;
  468.     PUNBIND_INTERFACE   pfnUnbindInterface;
  469.     PENABLE_INTERFACE   pfnEnableInterface;
  470.     PDISABLE_INTERFACE  pfnDisableInterface;
  471.     PGET_GLOBAL_INFO    pfnGetGlobalInfo;
  472.     PSET_GLOBAL_INFO    pfnSetGlobalInfo;
  473.     PDO_UPDATE_ROUTES   pfnUpdateRoutes;
  474.     PMIB_CREATE         pfnMibCreateEntry;
  475.     PMIB_DELETE         pfnMibDeleteEntry;
  476.     PMIB_GET            pfnMibGetEntry;
  477.     PMIB_SET            pfnMibSetEntry;
  478.     PMIB_GET_FIRST      pfnMibGetFirstEntry;
  479.     PMIB_GET_NEXT       pfnMibGetNextEntry;
  480.     PMIB_SET_TRAP_INFO  pfnMibSetTrapInfo;
  481.     PMIB_GET_TRAP_INFO  pfnMibGetTrapInfo;
  482. }MPR40_ROUTING_CHARACTERISTICS;
  483.  
  484. typedef struct _MPR50_ROUTING_CHARACTERISTICS
  485. {
  486.  
  487. #ifdef __cplusplus
  488.     MPR40_ROUTING_CHARACTERISTICS   mrcMpr40Chars;
  489. #else
  490.     MPR40_ROUTING_CHARACTERISTICS;
  491. #endif
  492.  
  493. }MPR50_ROUTING_CHARACTERISTICS;
  494.  
  495. #if MPR50
  496. typedef MPR50_ROUTING_CHARACTERISTICS MPR_ROUTING_CHARACTERISTICS;
  497. #else
  498.     #if MPR40
  499.     typedef MPR40_ROUTING_CHARACTERISTICS MPR_ROUTING_CHARACTERISTICS;
  500.     #endif
  501. #endif
  502.  
  503. typedef MPR_ROUTING_CHARACTERISTICS *PMPR_ROUTING_CHARACTERISTICS;
  504.  
  505.  
  506. //
  507. // All routing protocols must export the following entry point.
  508. // The router manager calls this function to allow the routing
  509. // protocol to register
  510. //
  511.  
  512. #define REGISTER_PROTOCOL_ENTRY_POINT           RegisterProtocol
  513. #define REGISTER_PROTOCOL_ENTRY_POINT_STRING    "RegisterProtocol"
  514.  
  515. typedef 
  516. DWORD
  517. (WINAPI * PREGISTER_PROTOCOL) (
  518.     IN OUT PMPR_ROUTING_CHARACTERISTICS pRoutingChar,
  519.     IN OUT PMPR_SERVICE_CHARACTERISTICS pServiceChar
  520.     );
  521.  
  522.  
  523. #ifdef __cplusplus
  524. }
  525. #endif
  526.  
  527. #endif //__ROUTING_ROUTPROT_H__
  528.