home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / rtmv2.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  36KB  |  1,218 lines

  1. /*++
  2.  
  3. Copyright (c) 1995-1999 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     rtmv2.h
  8.  
  9. Abstract:
  10.     Interface for Routing Table Manager v2 DLL
  11.  
  12. Author:
  13.     Chaitanya Kodeboyina (chaitk)  01-Jun-1998
  14.  
  15. Revision History:
  16.  
  17. --*/
  18.  
  19. #ifndef __ROUTING_RTMv2_H__
  20. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  21. #define __ROUTING_RTMv2_H__
  22.  
  23. #ifdef __cplusplus
  24. extern "C"
  25. {
  26. #endif
  27.  
  28. //
  29. // General Constants defined by the API
  30. //
  31.  
  32. // Max addr size for an address family
  33. #define RTM_MAX_ADDRESS_SIZE         16
  34.  
  35. //
  36. // Supported Route Table Views
  37. //
  38. #define RTM_MAX_VIEWS                 32
  39.  
  40. #define RTM_VIEW_ID_UCAST              0
  41. #define RTM_VIEW_ID_MCAST              1
  42.  
  43. #define RTM_VIEW_MASK_SIZE          0x20
  44.  
  45. #define RTM_VIEW_MASK_NONE    0x00000000
  46. #define RTM_VIEW_MASK_ANY     0x00000000
  47.  
  48. #define RTM_VIEW_MASK_UCAST   0x00000001
  49. #define RTM_VIEW_MASK_MCAST   0x00000002
  50.  
  51. #define RTM_VIEW_MASK_ALL     0xFFFFFFFF
  52.  
  53. // Identifies a particular view
  54. typedef INT   RTM_VIEW_ID, *PRTM_VIEW_ID;
  55.  
  56. // Set of views expressed as a mask
  57. typedef DWORD RTM_VIEW_SET, *PRTM_VIEW_SET;
  58.  
  59.  
  60. //
  61. // Profile returned during registration
  62. //
  63. typedef struct _RTM_REGN_PROFILE
  64. {
  65.     UINT            MaxNextHopsInRoute; // Max. number of equal cost nexthops
  66.                                         // in a route, & Max. number of local
  67.                                         // nexthops in any one remote nexthop
  68.  
  69.     UINT            MaxHandlesInEnum;   // Max. handles returned in one call to
  70.                                         // RtmGetEnumDests, RtmGetChangedDests,
  71.                                         // RtmGetEnumRoutes,RtmGetRoutesInElist
  72.  
  73.     RTM_VIEW_SET    ViewsSupported;     // Views supported by this addr family
  74.  
  75.     UINT            NumberOfViews;      // Number of views (# 1s in above mask)
  76. }
  77. RTM_REGN_PROFILE, *PRTM_REGN_PROFILE;
  78.  
  79.  
  80. //
  81. // Handles pointing to RTMv2 blocks
  82. //
  83. typedef HANDLE      RTM_ENTITY_HANDLE,
  84.                    *PRTM_ENTITY_HANDLE,
  85.                     RTM_DEST_HANDLE,
  86.                    *PRTM_DEST_HANDLE,
  87.                     RTM_ROUTE_HANDLE,
  88.                    *PRTM_ROUTE_HANDLE,
  89.                     RTM_NEXTHOP_HANDLE,
  90.                    *PRTM_NEXTHOP_HANDLE,
  91.                     RTM_ENUM_HANDLE,
  92.                    *PRTM_ENUM_HANDLE,
  93.                     RTM_ROUTE_LIST_HANDLE,
  94.                    *PRTM_ROUTE_LIST_HANDLE,
  95.                     RTM_NOTIFY_HANDLE,
  96.                    *PRTM_NOTIFY_HANDLE;
  97.  
  98. //
  99. // Network Address struct for any
  100. // address family that works with
  101. // only contiguous address masks
  102. //
  103. typedef struct _RTM_NET_ADDRESS
  104. {
  105.     USHORT AddressFamily;                  // Type of this net address (IPv4..)
  106.  
  107.     USHORT NumBits;                        // Number of leading bits in prefix
  108.  
  109.     UCHAR  AddrBits[RTM_MAX_ADDRESS_SIZE]; // Array of bits that form prefix
  110. }
  111. RTM_NET_ADDRESS, *PRTM_NET_ADDRESS;
  112.  
  113.  
  114. //
  115. // IPv4 macros to work on addresses
  116. //
  117.  
  118. #define RTM_IPV4_MAKE_NET_ADDRESS(NetAddress, Addr, Len)           \
  119.         RTM_IPV4_SET_ADDR_AND_LEN(NetAddress, Addr, Len)
  120.  
  121.  
  122. #define RTM_CHECK_NTH_BIT(Value, N, Len)                           \
  123.         if ((Value) & (1 << (N)))                                  \
  124.         {                                                          \
  125.             (Len) += (N); (Value) <<= (N);                         \
  126.         }                                                          \
  127.  
  128. #define RTM_IPV4_LEN_FROM_MASK(Len, Mask)                          \
  129.         {                                                          \
  130.             ULONG _Temp_ = ntohl(Mask);                            \
  131.                                                                    \
  132.             (Len) = 0;                                             \
  133.                                                                    \
  134.             RTM_CHECK_NTH_BIT(_Temp_, 16, (Len));                  \
  135.             RTM_CHECK_NTH_BIT(_Temp_,  8, (Len));                  \
  136.             RTM_CHECK_NTH_BIT(_Temp_,  4, (Len));                  \
  137.                                                                    \
  138.             while (_Temp_)                                         \
  139.             {                                                      \
  140.                 (Len) +=  1; _Temp_ <<=  1;                        \
  141.             }                                                      \
  142.         }                                                          \
  143.  
  144. #define RTM_IPV4_MASK_FROM_LEN(Len)                                \
  145.         ((Len) ? htonl(~0 << (32 - (Len))): 0);                    \
  146.  
  147.  
  148. #define RTM_IPV4_SET_ADDR_AND_LEN(NetAddress, Addr, Len)           \
  149.         (NetAddress)->AddressFamily = AF_INET;                     \
  150.         (NetAddress)->NumBits  = (USHORT) (Len);                   \
  151.         (* (ULONG *) ((NetAddress)->AddrBits)) = (Addr);           \
  152.  
  153. #define RTM_IPV4_GET_ADDR_AND_LEN(Addr, Len, NetAddress)           \
  154.         (Len) = (NetAddress)->NumBits;                             \
  155.         (Addr) = (* (ULONG *) ((NetAddress)->AddrBits));           \
  156.  
  157.  
  158. #define RTM_IPV4_SET_ADDR_AND_MASK(NetAddress, Addr, Mask)         \
  159.         (NetAddress)->AddressFamily = AF_INET;                     \
  160.         (* (ULONG *) ((NetAddress)->AddrBits)) = (Addr);           \
  161.         RTM_IPV4_LEN_FROM_MASK((NetAddress)->NumBits, Mask)
  162.  
  163. #define RTM_IPV4_GET_ADDR_AND_MASK(Addr, Mask, NetAddress)         \
  164.         (Addr) = (* (ULONG *) ((NetAddress)->AddrBits));           \
  165.         (Mask) = RTM_IPV4_MASK_FROM_LEN((NetAddress)->NumBits);    \
  166.  
  167.  
  168. //
  169. // This structure encapsulates info
  170. // used in comparing any two routes
  171. // [Preference is impt than metric]
  172. //
  173. typedef struct _RTM_PREF_INFO
  174. {
  175.     ULONG               Metric;         // Routing protocol specific metric
  176.     ULONG               Preference;     // Determined by the router policy
  177. }
  178. RTM_PREF_INFO, *PRTM_PREF_INFO;
  179.  
  180.  
  181. //
  182. // List of nexthops used for equal
  183. // cost path in a route or nexthop
  184. //
  185. typedef struct _RTM_NEXTHOP_LIST
  186. {
  187.     USHORT              NumNextHops;    // Num of equal cost next hops in list
  188.     RTM_NEXTHOP_HANDLE  NextHops[1];    // NumNextHops num of next hop handles
  189. }
  190. RTM_NEXTHOP_LIST, *PRTM_NEXTHOP_LIST;
  191.  
  192.  
  193. //
  194. // Structure used to exchange dest
  195. // information with RTM entities
  196. //
  197. typedef struct _RTM_DEST_INFO
  198. {
  199.     RTM_DEST_HANDLE     DestHandle;       // Handle to the destination
  200.  
  201.     RTM_NET_ADDRESS     DestAddress;      // Destination network Address
  202.  
  203.     FILETIME            LastChanged;      // Last time dest was modified
  204.  
  205.     RTM_VIEW_SET        BelongsToViews;   // View that dest belongs too
  206.  
  207.     UINT                NumberOfViews;    // Number of view info slots
  208.     struct
  209.     {
  210.         RTM_VIEW_ID         ViewId;       // View ID for this view info block
  211.         UINT                NumRoutes;    // Number of routes,
  212.         RTM_ROUTE_HANDLE    Route;        // Best route with matching criteria
  213.         RTM_ENTITY_HANDLE   Owner;        // Best Route's Owner,
  214.         DWORD               DestFlags;    // Best Route's Flags, and
  215.         RTM_ROUTE_HANDLE    HoldRoute;    // Holddown route,
  216.     }                   ViewInfo[1];      // in each one of the supported views
  217. }
  218. RTM_DEST_INFO, *PRTM_DEST_INFO;
  219.  
  220. //
  221. // Macros useful in working on dests
  222. //
  223. #define RTM_BASIC_DEST_INFO_SIZE                                         \
  224.     FIELD_OFFSET(RTM_DEST_INFO, ViewInfo)
  225.  
  226. #define RTM_DEST_VIEW_INFO_SIZE                                          \
  227.     (sizeof(RTM_DEST_INFO) - RTM_BASIC_DEST_INFO_SIZE)
  228.  
  229. #define RTM_SIZE_OF_DEST_INFO(NumViews)                                  \
  230.     (RTM_BASIC_DEST_INFO_SIZE + (NumViews) * RTM_DEST_VIEW_INFO_SIZE)
  231.  
  232. //
  233. // Destination Flags
  234. //
  235. #define RTM_DEST_FLAG_NATURAL_NET   0x01
  236. #define RTM_DEST_FLAG_FWD_ENGIN_ADD 0x02
  237. #define RTM_DEST_FLAG_DONT_FORWARD  0x04
  238.  
  239. //
  240. // Structure used to exchange route
  241. // information with RTM entities
  242. //
  243. typedef struct _RTM_ROUTE_INFO
  244. {
  245.     //
  246.     // Information that the owner can
  247.     // directly access for read only
  248.     //
  249.  
  250.     RTM_DEST_HANDLE     DestHandle;       // Handle to owning destination
  251.  
  252.     RTM_ENTITY_HANDLE   RouteOwner;       // Entity the owns this route
  253.  
  254.     RTM_NEXTHOP_HANDLE  Neighbour;        // Neighbour we learnt route from
  255.  
  256.     UCHAR               State;            // See RTM_ROUTE_STATE_* below
  257.  
  258.     //
  259.     // Information that the owner can
  260.     // directly access for read/write
  261.     //
  262.  
  263.     UCHAR               Flags1;           // RTM v1 compatibility flags (temp)
  264.  
  265.     USHORT              Flags;            // See RTM_ROUTE_FLAGS_* below
  266.  
  267.     RTM_PREF_INFO       PrefInfo;         // Preference and metric for route
  268.  
  269.     RTM_VIEW_SET        BelongsToViews;   // Views that route belongs to
  270.  
  271.     PVOID               EntitySpecificInfo; // Owning Entity's private info
  272.  
  273.     RTM_NEXTHOP_LIST    NextHopsList;     // List of equal cost next-hops
  274. }
  275. RTM_ROUTE_INFO, *PRTM_ROUTE_INFO;
  276.  
  277. //
  278. // Macros useful in working on routes
  279. //
  280. #define RTM_BASIC_ROUTE_INFO_SIZE                                        \
  281.     FIELD_OFFSET(RTM_ROUTE_INFO, NextHopsList.NumNextHops)
  282.  
  283. #define RTM_SIZE_OF_ROUTE_INFO(NumHops)                                  \
  284.     (RTM_BASIC_ROUTE_INFO_SIZE + (NumHops) * sizeof(RTM_NEXTHOP_HANDLE))
  285.  
  286. //
  287. // State of the Route
  288. //
  289. #define RTM_ROUTE_STATE_CREATED        0
  290. #define RTM_ROUTE_STATE_DELETING       1
  291. #define RTM_ROUTE_STATE_DELETED        2
  292.  
  293.  
  294. //
  295. // Route Information Flags
  296. //
  297.  
  298. // Forwarding Flags
  299.  
  300. #define RTM_ROUTE_FLAGS_MARTIAN        0x0001
  301. #define RTM_ROUTE_FLAGS_BLACKHOLE      0x0002
  302. #define RTM_ROUTE_FLAGS_DISCARD        0x0004
  303. #define RTM_ROUTE_FLAGS_INACTIVE       0x0008
  304.  
  305. // Unicast Flags
  306.  
  307. #define RTM_ROUTE_FLAGS_LOCAL          0x0010
  308. #define RTM_ROUTE_FLAGS_REMOTE         0x0020
  309. #define RTM_ROUTE_FLAGS_MYSELF         0x0040
  310.  
  311. #define RTM_ROUTE_FLAGS_LOOPBACK       0x0080
  312.  
  313. // Bcast, Mcast Flags
  314.  
  315. #define RTM_ROUTE_FLAGS_MCAST          0x0100
  316. #define RTM_ROUTE_FLAGS_LOCAL_MCAST    0x0200
  317.  
  318. #define RTM_ROUTE_FLAGS_LIMITED_BC     0x0400
  319.  
  320. #define RTM_ROUTE_FLAGS_ZEROS_NETBC    0x1000
  321. #define RTM_ROUTE_FLAGS_ZEROS_SUBNETBC 0x2000
  322. #define RTM_ROUTE_FLAGS_ONES_NETBC     0x4000
  323. #define RTM_ROUTE_FLAGS_ONES_SUBNETBC  0x8000
  324.  
  325. // Grouping of Flags
  326.  
  327. #define RTM_ROUTE_FLAGS_FORWARDING        \
  328.         (RTM_ROUTE_FLAGS_MARTIAN        | \
  329.          RTM_ROUTE_FLAGS_BLACKHOLE      | \
  330.          RTM_ROUTE_FLAGS_DISCARD        | \
  331.          RTM_ROUTE_FLAGS_INACTIVE)
  332.  
  333. #define RTM_ROUTE_FLAGS_ANY_UNICAST       \
  334.         (RTM_ROUTE_FLAGS_LOCAL          | \
  335.          RTM_ROUTE_FLAGS_REMOTE         | \
  336.          RTM_ROUTE_FLAGS_MYSELF)
  337.  
  338. #define RTM_ROUTE_FLAGS_ANY_MCAST         \
  339.         (RTM_ROUTE_FLAGS_MCAST          | \
  340.          RTM_ROUTE_FLAGS_LOCAL_MCAST)
  341.  
  342. #define RTM_ROUTE_FLAGS_SUBNET_BCAST      \
  343.         (RTM_ROUTE_FLAGS_ONES_SUBNET_BC | \
  344.          RTM_ROUTE_FLAGS_ZEROS_SUBNETBC)
  345.  
  346. #define RTM_ROUTE_FLAGS_NET_BCAST         \
  347.         (RTM_ROUTE_FLAGS_ONES_NETBC     | \
  348.          RTM_ROUTE_FLAGS_ZEROS_NETBC)
  349.  
  350. #define RTM_ROUTE_FLAGS_ANY_BCAST         \
  351.         (RTM_ROUTE_FLAGS_LIMITED_BC     | \
  352.          RTM_ROUTE_FLAGS_ONES_NETBC     | \
  353.          RTM_ROUTE_FLAGS_ONES_SUBNET_BC | \
  354.          RTM_ROUTE_FLAGS_ZEROS_NETBC    | \
  355.          RTM_ROUTE_FLAGS_ZEROS_SUBNETBC)
  356.  
  357. //
  358. // Structure used to exchange next-hop
  359. // information with RTM entities
  360. //
  361. typedef struct _RTM_NEXTHOP_INFO
  362. {
  363.     //
  364.     // Information that the owner can
  365.     // directly access for read only
  366.     //
  367.  
  368.     RTM_NET_ADDRESS     NextHopAddress;   // Net Address for this next hop
  369.  
  370.     RTM_ENTITY_HANDLE   NextHopOwner;     // Entity that owns this next hop
  371.  
  372.     ULONG               InterfaceIndex;   // Outgoing interface index
  373.                                           // '0' for a remote nexthop
  374.  
  375.     USHORT              State;            // See RTM_NEXTHOP_STATE_* below
  376.  
  377.     //
  378.     // Information that the owner can
  379.     // directly access for read/write
  380.     //
  381.  
  382.     USHORT              Flags;            // See RTM_NEXTHOP_FLAGS_* below
  383.  
  384.     PVOID               EntitySpecificInfo; // Owning Entity's private info
  385.  
  386.     RTM_DEST_HANDLE     RemoteNextHop;    // Handle to dest with nexthop addr
  387.                                           // [ Not used for a local nexthop ]
  388. }
  389. RTM_NEXTHOP_INFO, *PRTM_NEXTHOP_INFO;
  390.  
  391. //
  392. // Next Hop State
  393. //
  394.  
  395. #define RTM_NEXTHOP_STATE_CREATED      0
  396. #define RTM_NEXTHOP_STATE_DELETED      1
  397.  
  398. //
  399. // Next Hop Flags
  400. //
  401.  
  402. #define RTM_NEXTHOP_FLAGS_REMOTE  0x0001
  403. #define RTM_NEXTHOP_FLAGS_DOWN    0x0002
  404.  
  405.  
  406. //
  407. // Entity Registration Related Defns
  408. //
  409.  
  410. //
  411. // Info that uniquely identifies an entity
  412. //
  413.  
  414. // Disable warnings for unnamed structs
  415. #if _MSC_VER >= 1200
  416. #pragma warning(push)
  417. #endif
  418. #pragma warning(disable : 4201)
  419.  
  420. typedef struct _RTM_ENTITY_ID
  421. {
  422.     union
  423.     {
  424.         struct
  425.         {
  426.             ULONG    EntityProtocolId;  // Entity's Protocol ID (RIP,OSPF...)
  427.             ULONG    EntityInstanceId;  // Entity's Protocol Instance
  428.         };
  429.  
  430.         ULONGLONG    EntityId;          // Protocol ID and Instance
  431.     };
  432. }
  433. RTM_ENTITY_ID, *PRTM_ENTITY_ID;
  434.  
  435. #if _MSC_VER >= 1200
  436. #pragma warning(pop)
  437. #else
  438. #pragma warning(default : 4201)
  439. #endif
  440.  
  441. //
  442. // Structure used to exchange entity
  443. // information with RTM entities
  444. //
  445. typedef struct _RTM_ENTITY_INFO
  446. {
  447.     USHORT         RtmInstanceId;       // RTM Instance that it registered with
  448.     USHORT         AddressFamily;       // Entity's Address Family
  449.  
  450.     RTM_ENTITY_ID  EntityId;            // Uniquely identifies an entity
  451. }
  452. RTM_ENTITY_INFO, *PRTM_ENTITY_INFO;
  453.  
  454.  
  455. //
  456. // Event in the RTM involving an entity
  457. //
  458. typedef enum _RTM_EVENT_TYPE
  459. {
  460.     RTM_ENTITY_REGISTERED,
  461.     RTM_ENTITY_DEREGISTERED,
  462.     RTM_ROUTE_EXPIRED,
  463.     RTM_CHANGE_NOTIFICATION
  464. }
  465. RTM_EVENT_TYPE, *PRTM_EVENT_TYPE;
  466.  
  467. //
  468. // Entity event inform callback
  469. //
  470. // Used to inform entities of
  471. // new entities registering,
  472. // or entities deregistering
  473. //
  474. typedef
  475. DWORD
  476. (WINAPI * _EVENT_CALLBACK) (
  477.      IN  RTM_ENTITY_HANDLE    RtmRegHandle,  // Callee's Registration Handle
  478.      IN  RTM_EVENT_TYPE       EventType,
  479.      IN  PVOID                Context1,
  480.      IN  PVOID                Context2
  481.      );
  482.  
  483. typedef _EVENT_CALLBACK RTM_EVENT_CALLBACK,
  484.                       *PRTM_EVENT_CALLBACK;
  485.  
  486.  
  487. //
  488. // Methods exported by a registered entity
  489. //
  490.  
  491. #define METHOD_TYPE_ALL_METHODS      0xFFFFFFFF
  492.  
  493. #define METHOD_RIP2_NEIGHBOUR_ADDR   0x00000001
  494. #define METHOD_RIP2_OUTBOUND_INTF    0x00000002
  495. #define METHOD_RIP2_ROUTE_TAG        0x00000004
  496. #define METHOD_RIP2_ROUTE_TIMESTAMP  0x00000008
  497.  
  498. #define METHOD_OSPF_ROUTE_TYPE       0x00000001
  499. #define METHOD_OSPF_ROUTE_METRIC     0x00000002
  500. #define METHOD_OSPF_LSDB_TYPE        0x00000004
  501. #define METHOD_OSPF_ROUTE_TAG        0x00000008
  502. #define METHOD_OSPF_ROUTE_AREA       0x00000010
  503. #define METHOD_OSPF_FWD_ADDRESS      0x00000020
  504.  
  505. #define METHOD_BGP4_AS_PATH          0x00000001
  506. #define METHOD_BGP4_PEER_ID          0x00000002
  507. #define METHOD_BGP4_PA_ORIGIN        0x00000004
  508. #define METHOD_BGP4_NEXTHOP_ATTR     0x00000008
  509.  
  510. typedef DWORD      RTM_ENTITY_METHOD_TYPE,
  511.                  *PRTM_ENTITY_METHOD_TYPE;
  512.  
  513.  
  514. //
  515. // Generic Input Structure for entity methods
  516. //
  517. typedef struct _RTM_ENTITY_METHOD_INPUT
  518. {
  519.     RTM_ENTITY_METHOD_TYPE MethodType;    // Type identifying the method
  520.     UINT                   InputSize;     // Input Data Size
  521.     UCHAR                  InputData[1];  // Input Data Buffer
  522. }
  523. RTM_ENTITY_METHOD_INPUT, *PRTM_ENTITY_METHOD_INPUT;
  524.  
  525. //
  526. // Generic Output Structure for entity methods
  527. //
  528. typedef struct _RTM_ENTITY_METHOD_OUTPUT
  529. {
  530.     RTM_ENTITY_METHOD_TYPE MethodType;    // Type identifying the method
  531.     DWORD                  MethodStatus;  // Return Status of method
  532.     UINT                   OutputSize;    // Output Data Size
  533.     UCHAR                  OutputData[1]; // Output Data Buffer
  534. }
  535. RTM_ENTITY_METHOD_OUTPUT, *PRTM_ENTITY_METHOD_OUTPUT;
  536.  
  537. //
  538. // Common prototype for entity methods
  539. //
  540. typedef
  541. VOID
  542. (WINAPI * _ENTITY_METHOD) (
  543.     IN  RTM_ENTITY_HANDLE         CallerHandle,
  544.     IN  RTM_ENTITY_HANDLE         CalleeHandle,
  545.     IN  RTM_ENTITY_METHOD_INPUT  *Input,
  546.     OUT RTM_ENTITY_METHOD_OUTPUT *Output
  547.     );
  548.  
  549. typedef _ENTITY_METHOD RTM_ENTITY_EXPORT_METHOD,
  550.                      *PRTM_ENTITY_EXPORT_METHOD;
  551.  
  552. //
  553. // Set of exported entity methods
  554. //
  555. typedef struct _RTM_ENTITY_EXPORT_METHODS
  556. {
  557.     UINT                     NumMethods;
  558.     RTM_ENTITY_EXPORT_METHOD Methods[1];
  559. }
  560. RTM_ENTITY_EXPORT_METHODS, *PRTM_ENTITY_EXPORT_METHODS;
  561.  
  562. //
  563. // To toggle method blocking on dests, routes and nexthops
  564. //
  565. #define RTM_RESUME_METHODS             0
  566. #define RTM_BLOCK_METHODS              1
  567.  
  568.  
  569. //
  570. // I/O Flags when route is added/updated
  571. //
  572. typedef DWORD    RTM_ROUTE_CHANGE_FLAGS,
  573.                *PRTM_ROUTE_CHANGE_FLAGS;
  574.  
  575. #define RTM_ROUTE_CHANGE_FIRST      0x01
  576. #define RTM_ROUTE_CHANGE_NEW        0x02
  577. #define RTM_ROUTE_CHANGE_BEST 0x00010000
  578.  
  579. //
  580. // Output flags when nexthop is added
  581. //
  582. typedef DWORD  RTM_NEXTHOP_CHANGE_FLAGS,
  583.              *PRTM_NEXTHOP_CHANGE_FLAGS;
  584.  
  585. #define RTM_NEXTHOP_CHANGE_NEW      0x01
  586.  
  587.  
  588. //
  589. // Definitions relating to RIB queries
  590. //
  591.  
  592. //
  593. // Flags used to matching routes in RIB
  594. //
  595. typedef DWORD           RTM_MATCH_FLAGS,
  596.                       *PRTM_MATCH_FLAGS;
  597.  
  598. #define RTM_MATCH_NONE        0x00000000
  599. #define RTM_MATCH_OWNER       0x00000001
  600. #define RTM_MATCH_NEIGHBOUR   0x00000002
  601. #define RTM_MATCH_PREF        0x00000004
  602. #define RTM_MATCH_NEXTHOP     0x00000008
  603. #define RTM_MATCH_INTERFACE   0x00000010
  604. #define RTM_MATCH_FULL        0x0000FFFF
  605.  
  606. //
  607. // Flags to specify route being queried
  608. //
  609. #define RTM_BEST_PROTOCOL    (ULONG)   0
  610. #define RTM_THIS_PROTOCOL    (ULONG)  ~0
  611.  
  612.  
  613. //
  614. // Definitions relating to enumerations
  615. //
  616.  
  617. typedef DWORD            RTM_ENUM_FLAGS,
  618.                        *PRTM_ENUM_FLAGS;
  619.  
  620. // Enumeration Flags
  621.  
  622. #define RTM_ENUM_START        0x00000000
  623. #define RTM_ENUM_NEXT         0x00000001
  624. #define RTM_ENUM_RANGE        0x00000002
  625.  
  626. #define RTM_ENUM_ALL_DESTS    0x00000000
  627. #define RTM_ENUM_OWN_DESTS    0x01000000
  628.  
  629. #define RTM_ENUM_ALL_ROUTES   0x00000000
  630. #define RTM_ENUM_OWN_ROUTES   0x00010000
  631.  
  632.  
  633. //
  634. // Definitions relating to notifications
  635. //
  636.  
  637. // Notify Flags is composed as follows -
  638. // (Change Types | Dests) interested in.
  639.  
  640. typedef DWORD          RTM_NOTIFY_FLAGS,
  641.                      *PRTM_NOTIFY_FLAGS;
  642.  
  643. // Change Types to notify about
  644.  
  645. #define RTM_NUM_CHANGE_TYPES            3
  646.  
  647. #define RTM_CHANGE_TYPE_ALL        0x0001
  648. #define RTM_CHANGE_TYPE_BEST       0x0002
  649. #define RTM_CHANGE_TYPE_FORWARDING 0x0004
  650.  
  651. // Dests whose changes to notify
  652.  
  653. #define RTM_NOTIFY_ONLY_MARKED_DESTS 0x00010000
  654.  
  655.  
  656. //
  657. // Registration API Prototypes
  658. //
  659.  
  660. DWORD
  661. WINAPI
  662. RtmRegisterEntity (
  663.     IN      PRTM_ENTITY_INFO                RtmEntityInfo,
  664.     IN      PRTM_ENTITY_EXPORT_METHODS      ExportMethods OPTIONAL,
  665.     IN      RTM_EVENT_CALLBACK              EventCallback,
  666.     IN      BOOL                            ReserveOpaquePointer,
  667.     OUT     PRTM_REGN_PROFILE               RtmRegProfile,
  668.     OUT     PRTM_ENTITY_HANDLE              RtmRegHandle
  669.     );
  670.  
  671. DWORD
  672. WINAPI
  673. RtmDeregisterEntity (
  674.     IN      RTM_ENTITY_HANDLE               RtmRegHandle
  675.     );
  676.  
  677. DWORD
  678. WINAPI
  679. RtmGetRegisteredEntities (
  680.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  681.     IN OUT  PUINT                           NumEntities,
  682.     OUT     PRTM_ENTITY_HANDLE              EntityHandles,
  683.     OUT     PRTM_ENTITY_INFO                EntityInfos OPTIONAL
  684.     );
  685.  
  686. DWORD
  687. WINAPI
  688. RtmReleaseEntities (
  689.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  690.     IN      UINT                            NumEntities,
  691.     IN      PRTM_ENTITY_HANDLE              EntityHandles
  692.     );
  693.  
  694. //
  695. // Opaque Ptr APIs
  696. //
  697.  
  698. DWORD
  699. WINAPI
  700. RtmLockDestination(
  701.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  702.     IN      RTM_DEST_HANDLE                 DestHandle,
  703.     IN      BOOL                            Exclusive,
  704.     IN      BOOL                            LockDest
  705.     );
  706.  
  707. DWORD
  708. WINAPI
  709. RtmGetOpaqueInformationPointer (
  710.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  711.     IN      RTM_DEST_HANDLE                 DestHandle,
  712.     OUT     PVOID                          *OpaqueInfoPointer
  713.     );
  714.  
  715. //
  716. // Export Method API Prototypes
  717. //
  718.  
  719. DWORD
  720. WINAPI
  721. RtmGetEntityMethods (
  722.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  723.     IN      RTM_ENTITY_HANDLE               EntityHandle,
  724.     IN OUT  PUINT                           NumMethods,
  725.     OUT     PRTM_ENTITY_EXPORT_METHOD       ExptMethods
  726.     );
  727.  
  728. DWORD
  729. WINAPI
  730. RtmInvokeMethod (
  731.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  732.     IN      RTM_ENTITY_HANDLE               EntityHandle,
  733.     IN      PRTM_ENTITY_METHOD_INPUT        Input,
  734.     IN OUT  PUINT                           OutputSize,
  735.     OUT     PRTM_ENTITY_METHOD_OUTPUT       Output
  736.     );
  737.  
  738. DWORD
  739. WINAPI
  740. RtmBlockMethods (
  741.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  742.     IN      HANDLE                          TargetHandle OPTIONAL,
  743.     IN      UCHAR                           TargetType   OPTIONAL,
  744.     IN      DWORD                           BlockingFlag
  745.     );
  746.  
  747. //
  748. // Handle to Info Structures
  749. //
  750.  
  751. DWORD
  752. WINAPI
  753. RtmGetEntityInfo (
  754.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  755.     IN      RTM_ENTITY_HANDLE               EntityHandle,
  756.     OUT     PRTM_ENTITY_INFO                EntityInfo
  757.     );
  758.  
  759. DWORD
  760. WINAPI
  761. RtmGetDestInfo (
  762.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  763.     IN      RTM_DEST_HANDLE                 DestHandle,
  764.     IN      ULONG                           ProtocolId,
  765.     IN      RTM_VIEW_SET                    TargetViews,
  766.     OUT     PRTM_DEST_INFO                  DestInfo
  767.     );
  768.  
  769. DWORD
  770. WINAPI
  771. RtmGetRouteInfo (
  772.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  773.     IN      RTM_ROUTE_HANDLE                RouteHandle,
  774.     OUT     PRTM_ROUTE_INFO                 RouteInfo   OPTIONAL,
  775.     OUT     PRTM_NET_ADDRESS                DestAddress OPTIONAL
  776.     );
  777.  
  778. DWORD
  779. WINAPI
  780. RtmGetNextHopInfo (
  781.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  782.     IN      RTM_NEXTHOP_HANDLE              NextHopHandle,
  783.     OUT     PRTM_NEXTHOP_INFO               NextHopInfo
  784.     );
  785.  
  786. DWORD
  787. WINAPI
  788. RtmReleaseEntityInfo (
  789.     IN      RTM_ENTITY_HANDLE              RtmRegHandle,
  790.     IN      PRTM_ENTITY_INFO               EntityInfo
  791.     );
  792.  
  793. DWORD
  794. WINAPI
  795. RtmReleaseDestInfo (
  796.     IN      RTM_ENTITY_HANDLE              RtmRegHandle,
  797.     IN      PRTM_DEST_INFO                 DestInfo
  798.     );
  799.  
  800. DWORD
  801. WINAPI
  802. RtmReleaseRouteInfo (
  803.     IN      RTM_ENTITY_HANDLE              RtmRegHandle,
  804.     IN      PRTM_ROUTE_INFO                RouteInfo
  805.     );
  806.  
  807. DWORD
  808. WINAPI
  809. RtmReleaseNextHopInfo (
  810.     IN      RTM_ENTITY_HANDLE              RtmRegHandle,
  811.     IN      PRTM_NEXTHOP_INFO              NextHopInfo
  812.     );
  813.  
  814.  
  815. //
  816. // RIB Insert/Delete API Prototypes
  817. //
  818.  
  819. DWORD
  820. WINAPI
  821. RtmAddRouteToDest (
  822.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  823.     IN OUT  PRTM_ROUTE_HANDLE               RouteHandle     OPTIONAL,
  824.     IN      PRTM_NET_ADDRESS                DestAddress,
  825.     IN      PRTM_ROUTE_INFO                 RouteInfo,
  826.     IN      ULONG                           TimeToLive,
  827.     IN      RTM_ROUTE_LIST_HANDLE           RouteListHandle OPTIONAL,
  828.     IN      RTM_NOTIFY_FLAGS                NotifyType,
  829.     IN      RTM_NOTIFY_HANDLE               NotifyHandle    OPTIONAL,
  830.     IN OUT  PRTM_ROUTE_CHANGE_FLAGS         ChangeFlags
  831.     );
  832.  
  833. DWORD
  834. WINAPI
  835. RtmDeleteRouteToDest (
  836.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  837.     IN      RTM_ROUTE_HANDLE                RouteHandle,
  838.     OUT     PRTM_ROUTE_CHANGE_FLAGS         ChangeFlags
  839.     );
  840.  
  841. DWORD
  842. WINAPI
  843. RtmHoldDestination (
  844.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  845.     IN      RTM_DEST_HANDLE                 DestHandle,
  846.     IN      RTM_VIEW_SET                    TargetViews,
  847.     IN      ULONG                           HoldTime
  848.     );
  849.  
  850. DWORD
  851. WINAPI
  852. RtmGetRoutePointer (
  853.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  854.     IN      RTM_ROUTE_HANDLE                RouteHandle,
  855.     OUT     PRTM_ROUTE_INFO                *RoutePointer
  856.     );
  857.  
  858. DWORD
  859. WINAPI
  860. RtmLockRoute(
  861.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  862.     IN      RTM_ROUTE_HANDLE                RouteHandle,
  863.     IN      BOOL                            Exclusive,
  864.     IN      BOOL                            LockRoute,
  865.     OUT     PRTM_ROUTE_INFO                *RoutePointer OPTIONAL
  866.     );
  867.  
  868. DWORD
  869. WINAPI
  870. RtmUpdateAndUnlockRoute(
  871.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  872.     IN      RTM_ROUTE_HANDLE                RouteHandle,
  873.     IN      ULONG                           TimeToLive,
  874.     IN      RTM_ROUTE_LIST_HANDLE           RouteListHandle OPTIONAL,
  875.     IN      RTM_NOTIFY_FLAGS                NotifyType,
  876.     IN      RTM_NOTIFY_HANDLE               NotifyHandle    OPTIONAL,
  877.     OUT     PRTM_ROUTE_CHANGE_FLAGS         ChangeFlags
  878.     );
  879.  
  880. //
  881. // RIB Query API Prototypes
  882. //
  883.  
  884. DWORD
  885. WINAPI
  886. RtmGetExactMatchDestination (
  887.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  888.     IN      PRTM_NET_ADDRESS                DestAddress,
  889.     IN      ULONG                           ProtocolId,
  890.     IN      RTM_VIEW_SET                    TargetViews,
  891.     OUT     PRTM_DEST_INFO                  DestInfo
  892.     );
  893.  
  894. DWORD
  895. WINAPI
  896. RtmGetMostSpecificDestination (
  897.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  898.     IN      PRTM_NET_ADDRESS                DestAddress,
  899.     IN      ULONG                           ProtocolId,
  900.     IN      RTM_VIEW_SET                    TargetViews,
  901.     OUT     PRTM_DEST_INFO                  DestInfo
  902.     );
  903.  
  904. DWORD
  905. WINAPI
  906. RtmGetLessSpecificDestination (
  907.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  908.     IN      RTM_DEST_HANDLE                 DestHandle,
  909.     IN      ULONG                           ProtocolId,
  910.     IN      RTM_VIEW_SET                    TargetViews,
  911.     OUT     PRTM_DEST_INFO                  DestInfo
  912.     );
  913.  
  914. DWORD
  915. WINAPI
  916. RtmGetExactMatchRoute (
  917.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  918.     IN      PRTM_NET_ADDRESS                DestAddress,
  919.     IN      RTM_MATCH_FLAGS                 MatchingFlags,
  920.     IN OUT  PRTM_ROUTE_INFO                 RouteInfo,
  921.     IN      ULONG                           InterfaceIndex,
  922.     IN      RTM_VIEW_SET                    TargetViews,
  923.     OUT     PRTM_ROUTE_HANDLE               RouteHandle
  924.     );
  925.  
  926. DWORD
  927. WINAPI
  928. RtmIsBestRoute (
  929.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  930.     IN      RTM_ROUTE_HANDLE                RouteHandle,
  931.     OUT     PRTM_VIEW_SET                   BestInViews
  932.     );
  933.  
  934. //
  935. // NextHop Object API Prototypes
  936. //
  937.  
  938. DWORD
  939. WINAPI
  940. RtmAddNextHop (
  941.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  942.     IN      PRTM_NEXTHOP_INFO               NextHopInfo,
  943.     IN OUT  PRTM_NEXTHOP_HANDLE             NextHopHandle OPTIONAL,
  944.     OUT     PRTM_NEXTHOP_CHANGE_FLAGS       ChangeFlags
  945.     );
  946.  
  947. DWORD
  948. WINAPI
  949. RtmFindNextHop (
  950.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  951.     IN      PRTM_NEXTHOP_INFO               NextHopInfo,
  952.     OUT     PRTM_NEXTHOP_HANDLE             NextHopHandle,
  953.     OUT     PRTM_NEXTHOP_INFO              *NextHopPointer OPTIONAL
  954.     );
  955.  
  956. DWORD
  957. WINAPI
  958. RtmDeleteNextHop (
  959.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  960.     IN      RTM_NEXTHOP_HANDLE              NextHopHandle  OPTIONAL,
  961.     IN      PRTM_NEXTHOP_INFO               NextHopInfo
  962.     );
  963.  
  964. DWORD
  965. WINAPI
  966. RtmGetNextHopPointer (
  967.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  968.     IN      RTM_NEXTHOP_HANDLE              NextHopHandle,
  969.     OUT     PRTM_NEXTHOP_INFO              *NextHopPointer
  970.     );
  971.  
  972. DWORD
  973. WINAPI
  974. RtmLockNextHop(
  975.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  976.     IN      RTM_NEXTHOP_HANDLE              NextHopHandle,
  977.     IN      BOOL                            Exclusive,
  978.     IN      BOOL                            LockNextHop,
  979.     OUT     PRTM_NEXTHOP_INFO              *NextHopPointer OPTIONAL
  980.     );
  981.  
  982.  
  983. //
  984. // Enumeration API Prototypes
  985. //
  986.  
  987. DWORD
  988. WINAPI
  989. RtmCreateDestEnum (
  990.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  991.     IN      RTM_VIEW_SET                    TargetViews,
  992.     IN      RTM_ENUM_FLAGS                  EnumFlags,
  993.     IN      PRTM_NET_ADDRESS                NetAddress,
  994.     IN      ULONG                           ProtocolId,
  995.     OUT     PRTM_ENUM_HANDLE                RtmEnumHandle
  996.     );
  997.  
  998. DWORD
  999. WINAPI
  1000. RtmGetEnumDests (
  1001.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1002.     IN      RTM_ENUM_HANDLE                 EnumHandle,
  1003.     IN OUT  PUINT                           NumDests,
  1004.     OUT     PRTM_DEST_INFO                  DestInfos
  1005.     );
  1006.  
  1007. DWORD
  1008. WINAPI
  1009. RtmReleaseDests (
  1010.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1011.     IN      UINT                            NumDests,
  1012.     IN      PRTM_DEST_INFO                  DestInfos
  1013.     );
  1014.  
  1015. DWORD
  1016. WINAPI
  1017. RtmCreateRouteEnum (
  1018.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1019.     IN      RTM_DEST_HANDLE                 DestHandle        OPTIONAL,
  1020.     IN      RTM_VIEW_SET                    TargetViews,
  1021.     IN      RTM_ENUM_FLAGS                  EnumFlags,
  1022.     IN      PRTM_NET_ADDRESS                StartDest         OPTIONAL,
  1023.     IN      RTM_MATCH_FLAGS                 MatchingFlags,
  1024.     IN      PRTM_ROUTE_INFO                 CriteriaRoute     OPTIONAL,
  1025.     IN      ULONG                           CriteriaInterface OPTIONAL,
  1026.     OUT     PRTM_ENUM_HANDLE                RtmEnumHandle
  1027.     );
  1028.  
  1029. DWORD
  1030. WINAPI
  1031. RtmGetEnumRoutes (
  1032.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1033.     IN      RTM_ENUM_HANDLE                 EnumHandle,
  1034.     IN OUT  PUINT                           NumRoutes,
  1035.     OUT     PRTM_ROUTE_HANDLE               RouteHandles
  1036.     );
  1037.  
  1038. DWORD
  1039. WINAPI
  1040. RtmReleaseRoutes (
  1041.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1042.     IN      UINT                            NumRoutes,
  1043.     IN      PRTM_ROUTE_HANDLE               RouteHandles
  1044.     );
  1045.  
  1046. DWORD
  1047. WINAPI
  1048. RtmCreateNextHopEnum (
  1049.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1050.     IN      RTM_ENUM_FLAGS                  EnumFlags,
  1051.     IN      PRTM_NET_ADDRESS                NetAddress,
  1052.     OUT     PRTM_ENUM_HANDLE                RtmEnumHandle
  1053.     );
  1054.  
  1055. DWORD
  1056. WINAPI
  1057. RtmGetEnumNextHops (
  1058.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1059.     IN      RTM_ENUM_HANDLE                 EnumHandle,
  1060.     IN OUT  PUINT                           NumNextHops,
  1061.     OUT     PRTM_NEXTHOP_HANDLE             NextHopHandles
  1062.     );
  1063.  
  1064. DWORD
  1065. WINAPI
  1066. RtmReleaseNextHops (
  1067.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1068.     IN      UINT                            NumNextHops,
  1069.     IN      PRTM_NEXTHOP_HANDLE             NextHopHandles
  1070.     );
  1071.  
  1072. DWORD
  1073. WINAPI
  1074. RtmDeleteEnumHandle (
  1075.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1076.     IN      RTM_ENUM_HANDLE                 EnumHandle
  1077.     );
  1078.  
  1079.  
  1080. //
  1081. // Change Notification APIs
  1082. //
  1083.  
  1084. DWORD
  1085. WINAPI
  1086. RtmRegisterForChangeNotification (
  1087.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1088.     IN      RTM_VIEW_SET                    TargetViews,
  1089.     IN      RTM_NOTIFY_FLAGS                NotifyFlags,
  1090.     IN      PVOID                           NotifyContext,
  1091.     OUT     PRTM_NOTIFY_HANDLE              NotifyHandle
  1092.     );
  1093.  
  1094. DWORD
  1095. WINAPI
  1096. RtmGetChangedDests (
  1097.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1098.     IN      RTM_NOTIFY_HANDLE               NotifyHandle,
  1099.     IN OUT  PUINT                           NumDests,
  1100.     OUT     PRTM_DEST_INFO                  ChangedDests
  1101.     );
  1102.  
  1103. DWORD
  1104. WINAPI
  1105. RtmReleaseChangedDests (
  1106.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1107.     IN      RTM_NOTIFY_HANDLE               NotifyHandle,
  1108.     IN      UINT                            NumDests,
  1109.     IN      PRTM_DEST_INFO                  ChangedDests
  1110.     );
  1111.  
  1112. DWORD
  1113. WINAPI
  1114. RtmIgnoreChangedDests (
  1115.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1116.     IN      RTM_NOTIFY_HANDLE               NotifyHandle,
  1117.     IN      UINT                            NumDests,
  1118.     IN      PRTM_DEST_HANDLE                ChangedDests
  1119.     );
  1120.  
  1121. DWORD
  1122. WINAPI
  1123. RtmGetChangeStatus (
  1124.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1125.     IN      RTM_NOTIFY_HANDLE               NotifyHandle,
  1126.     IN      RTM_DEST_HANDLE                 DestHandle,
  1127.     OUT     PBOOL                           ChangeStatus
  1128.     );
  1129.  
  1130. DWORD
  1131. WINAPI
  1132. RtmMarkDestForChangeNotification (
  1133.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1134.     IN      RTM_NOTIFY_HANDLE               NotifyHandle,
  1135.     IN      RTM_DEST_HANDLE                 DestHandle,
  1136.     IN      BOOL                            MarkDest
  1137.     );
  1138.  
  1139. DWORD
  1140. WINAPI
  1141. RtmIsMarkedForChangeNotification (
  1142.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1143.     IN      RTM_NOTIFY_HANDLE               NotifyHandle,
  1144.     IN      RTM_DEST_HANDLE                 DestHandle,
  1145.     OUT     PBOOL                           DestMarked
  1146.     );
  1147.  
  1148. DWORD
  1149. WINAPI
  1150. RtmDeregisterFromChangeNotification (
  1151.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1152.     IN      RTM_NOTIFY_HANDLE               NotifyHandle
  1153.     );
  1154.  
  1155.  
  1156. //
  1157. // Entity Specific List APIs
  1158. //
  1159.  
  1160. DWORD
  1161. WINAPI
  1162. RtmCreateRouteList (
  1163.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1164.     OUT     PRTM_ROUTE_LIST_HANDLE          RouteListHandle
  1165.     );
  1166.  
  1167. DWORD
  1168. WINAPI
  1169. RtmInsertInRouteList (
  1170.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1171.     IN      RTM_ROUTE_LIST_HANDLE           RouteListHandle OPTIONAL,
  1172.     IN      UINT                            NumRoutes,
  1173.     IN      PRTM_ROUTE_HANDLE               RouteHandles
  1174.     );
  1175.  
  1176. DWORD
  1177. WINAPI
  1178. RtmCreateRouteListEnum (
  1179.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1180.     IN      RTM_ROUTE_LIST_HANDLE           RouteListHandle,
  1181.     OUT     PRTM_ENUM_HANDLE                RtmEnumHandle
  1182.     );
  1183.  
  1184. DWORD
  1185. WINAPI
  1186. RtmGetListEnumRoutes (
  1187.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1188.     IN      RTM_ENUM_HANDLE                 EnumHandle,
  1189.     IN OUT  PUINT                           NumRoutes,
  1190.     OUT     PRTM_ROUTE_HANDLE               RouteHandles
  1191.     );
  1192.  
  1193. DWORD
  1194. WINAPI
  1195. RtmDeleteRouteList (
  1196.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1197.     IN      RTM_ROUTE_LIST_HANDLE           RouteListHandle
  1198.     );
  1199.  
  1200. //
  1201. // Handle Management APIs
  1202. //
  1203.  
  1204. DWORD
  1205. WINAPI
  1206. RtmReferenceHandles (
  1207.     IN      RTM_ENTITY_HANDLE               RtmRegHandle,
  1208.     IN      UINT                            NumHandles,
  1209.     IN      HANDLE                         *RtmHandles
  1210.     );
  1211.  
  1212. #ifdef __cplusplus
  1213. }
  1214. #endif
  1215.  
  1216. #pragma option pop /*P_O_Pop*/
  1217. #endif //__ROUTING_RTMv2_H__
  1218.