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

  1. /*++
  2.  
  3. Copyright (c) 1995-1999  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     iprtrmib.h
  8.  
  9. Abstract:
  10.     This file contains:
  11.         o Definitions of the MIB_XX structures passed to and from the IP Router Manager
  12.             to query and set MIB variables handled by the IP Router Manager
  13.         o The #defines for the MIB variables IDs  handled by the IP Router Manager
  14.             and made accessible by the MprAdminMIBXXX APIs
  15.         o The Routing PID of the IP Router Manager (as mentioned in ipinfoid.h)
  16.  
  17. --*/
  18.  
  19. #ifndef __ROUTING_IPRTRMIB_H__
  20. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  21. #define __ROUTING_IPRTRMIB_H__
  22.  
  23. #if _MSC_VER > 1000
  24. #pragma once
  25. #endif
  26.  
  27. #if _MSC_VER >= 1200
  28. #pragma warning(push)
  29. #endif
  30. #pragma warning(disable:4201)
  31.  
  32. //////////////////////////////////////////////////////////////////////////////
  33. //                                                                          //
  34. // Included to get the value of MAX_INTERFACE_NAME_LEN                      //
  35. //                                                                          //
  36. //////////////////////////////////////////////////////////////////////////////
  37.  
  38. #include <mprapi.h>
  39.  
  40. //////////////////////////////////////////////////////////////////////////////
  41. //                                                                          //
  42. // Included to get the necessary constants                                  //
  43. //                                                                          //
  44. //////////////////////////////////////////////////////////////////////////////
  45.  
  46. #include <ipifcons.h>
  47.  
  48. //////////////////////////////////////////////////////////////////////////////
  49. //                                                                          //
  50. // This is the Id for IP Router Manager.  The Router Manager handles        //
  51. // MIB-II, Forwarding MIB and some enterprise specific information.         //
  52. // Calls made with any other ID are passed on to the corresponding protocol //
  53. // For example, an MprAdminMIBXXX call with a protocol ID of PID_IP and    //
  54. // a routing Id of 0xD will be sent to the IP Router Manager and then       //
  55. // forwarded to OSPF                                                        //
  56. // This lives in the same number space as the protocol Ids of RIP, OSPF     //
  57. // etc, so any change made to it should be done keeping this in mind        //
  58. //                                                                          //
  59. //////////////////////////////////////////////////////////////////////////////
  60.  
  61.  
  62. #define IPRTRMGR_PID 10000
  63.  
  64. #ifndef ANY_SIZE
  65.  
  66. #define ANY_SIZE 1
  67.  
  68. #endif
  69.  
  70. //////////////////////////////////////////////////////////////////////////////
  71. //                                                                          //
  72. // The following #defines are the Ids of the MIB variables made accessible  //
  73. // to the user via MprAdminMIBXXX Apis.  It will be noticed that these are  //
  74. // not the same as RFC 1213, since the MprAdminMIBXXX APIs work on rows and //
  75. // groups instead of scalar variables                                       //
  76. //                                                                          //
  77. //////////////////////////////////////////////////////////////////////////////
  78.  
  79.  
  80. #define IF_NUMBER           0
  81. #define IF_TABLE            (IF_NUMBER          + 1)
  82. #define IF_ROW              (IF_TABLE           + 1)
  83. #define IP_STATS            (IF_ROW             + 1)
  84. #define IP_ADDRTABLE        (IP_STATS           + 1)
  85. #define IP_ADDRROW          (IP_ADDRTABLE       + 1)
  86. #define IP_FORWARDNUMBER    (IP_ADDRROW         + 1)
  87. #define IP_FORWARDTABLE     (IP_FORWARDNUMBER   + 1)
  88. #define IP_FORWARDROW       (IP_FORWARDTABLE    + 1)
  89. #define IP_NETTABLE         (IP_FORWARDROW      + 1)
  90. #define IP_NETROW           (IP_NETTABLE        + 1)
  91. #define ICMP_STATS          (IP_NETROW          + 1)
  92. #define TCP_STATS           (ICMP_STATS         + 1)
  93. #define TCP_TABLE           (TCP_STATS          + 1)
  94. #define TCP_ROW             (TCP_TABLE          + 1)
  95. #define UDP_STATS           (TCP_ROW            + 1)
  96. #define UDP_TABLE           (UDP_STATS          + 1)
  97. #define UDP_ROW             (UDP_TABLE          + 1)
  98. #define MCAST_MFE           (UDP_ROW            + 1)
  99. #define MCAST_MFE_STATS     (MCAST_MFE          + 1)
  100. #define BEST_IF             (MCAST_MFE_STATS    + 1)
  101. #define BEST_ROUTE          (BEST_IF            + 1)
  102. #define PROXY_ARP           (BEST_ROUTE         + 1)
  103. #define MCAST_IF_ENTRY      (PROXY_ARP          + 1)
  104. #define MCAST_GLOBAL        (MCAST_IF_ENTRY     + 1)
  105. #define IF_STATUS           (MCAST_GLOBAL       + 1)
  106. #define MCAST_BOUNDARY      (IF_STATUS          + 1)
  107. #define MCAST_SCOPE         (MCAST_BOUNDARY     + 1)
  108. #define DEST_MATCHING       (MCAST_SCOPE        + 1)
  109. #define DEST_LONGER         (DEST_MATCHING      + 1)
  110. #define DEST_SHORTER        (DEST_LONGER        + 1)
  111. #define ROUTE_MATCHING      (DEST_SHORTER       + 1)
  112. #define ROUTE_LONGER        (ROUTE_MATCHING     + 1)
  113. #define ROUTE_SHORTER       (ROUTE_LONGER       + 1)
  114.  
  115. #define NUMBER_OF_EXPORTED_VARIABLES    (ROUTE_SHORTER + 1)
  116.  
  117.  
  118. //////////////////////////////////////////////////////////////////////////////
  119. //                                                                          //
  120. // MIB_OPAQUE_QUERY is the structure filled in by the user to identify a    //
  121. // MIB variable                                                             //
  122. //                                                                          //
  123. //  dwVarId     ID of MIB Variable (One of the Ids #defined above)          //
  124. //  dwVarIndex  Variable sized array containing the indices needed to       //
  125. //              identify a variable. NOTE: Unlike SNMP we dont require that //
  126. //              a scalar variable be indexed by 0                           //
  127. //                                                                          //
  128. //////////////////////////////////////////////////////////////////////////////
  129.  
  130. typedef struct _MIB_OPAQUE_QUERY
  131. {
  132.     DWORD  dwVarId;
  133.     DWORD  rgdwVarIndex[ANY_SIZE];
  134. }MIB_OPAQUE_QUERY, *PMIB_OPAQUE_QUERY;
  135.  
  136. //////////////////////////////////////////////////////////////////////////////
  137. //                                                                          //
  138. // The following are the structures which are filled in and returned to the //
  139. // user when a query is made, OR  are filled in BY THE USER when a set is   //
  140. // done                                                                     //
  141. //                                                                          //
  142. //////////////////////////////////////////////////////////////////////////////
  143.  
  144. typedef struct _MIB_IFNUMBER
  145. {
  146.     DWORD    dwValue;
  147. } MIB_IFNUMBER, *PMIB_IFNUMBER;
  148.  
  149.  
  150. #define MAXLEN_IFDESCR 256
  151. #define MAXLEN_PHYSADDR 8
  152.  
  153. typedef struct _MIB_IFROW
  154. {
  155.     WCHAR   wszName[MAX_INTERFACE_NAME_LEN];
  156.     DWORD    dwIndex;
  157.     DWORD    dwType;
  158.     DWORD    dwMtu;
  159.     DWORD    dwSpeed;
  160.     DWORD    dwPhysAddrLen;
  161.     BYTE    bPhysAddr[MAXLEN_PHYSADDR];
  162.     DWORD    dwAdminStatus;
  163.     DWORD    dwOperStatus;
  164.     DWORD    dwLastChange;
  165.     DWORD    dwInOctets;
  166.     DWORD    dwInUcastPkts;
  167.     DWORD    dwInNUcastPkts;
  168.     DWORD    dwInDiscards;
  169.     DWORD    dwInErrors;
  170.     DWORD    dwInUnknownProtos;
  171.     DWORD    dwOutOctets;
  172.     DWORD    dwOutUcastPkts;
  173.     DWORD    dwOutNUcastPkts;
  174.     DWORD    dwOutDiscards;
  175.     DWORD    dwOutErrors;
  176.     DWORD    dwOutQLen;
  177.     DWORD    dwDescrLen;
  178.     BYTE    bDescr[MAXLEN_IFDESCR];
  179. } MIB_IFROW,*PMIB_IFROW;
  180.  
  181. typedef struct _MIB_IFTABLE
  182. {
  183.     DWORD     dwNumEntries;
  184.     MIB_IFROW table[ANY_SIZE];
  185. } MIB_IFTABLE, *PMIB_IFTABLE;
  186.  
  187. #define SIZEOF_IFTABLE(X) (FIELD_OFFSET(MIB_IFTABLE,table[0]) + ((X) * sizeof(MIB_IFROW)) + ALIGN_SIZE)
  188.  
  189. typedef struct _MIBICMPSTATS
  190. {
  191.     DWORD        dwMsgs;
  192.     DWORD        dwErrors;
  193.     DWORD        dwDestUnreachs;
  194.     DWORD        dwTimeExcds;
  195.     DWORD        dwParmProbs;
  196.     DWORD        dwSrcQuenchs;
  197.     DWORD        dwRedirects;
  198.     DWORD        dwEchos;
  199.     DWORD        dwEchoReps;
  200.     DWORD        dwTimestamps;
  201.     DWORD        dwTimestampReps;
  202.     DWORD        dwAddrMasks;
  203.     DWORD        dwAddrMaskReps;
  204. } MIBICMPSTATS;
  205.  
  206. typedef    struct _MIBICMPINFO
  207. {
  208.     MIBICMPSTATS    icmpInStats;
  209.     MIBICMPSTATS    icmpOutStats;
  210. } MIBICMPINFO;
  211.  
  212. typedef struct _MIB_ICMP
  213. {
  214.     MIBICMPINFO stats;
  215. } MIB_ICMP,*PMIB_ICMP;
  216.  
  217. typedef struct _MIB_UDPSTATS
  218. {
  219.     DWORD       dwInDatagrams;
  220.     DWORD       dwNoPorts;
  221.     DWORD       dwInErrors;
  222.     DWORD       dwOutDatagrams;
  223.     DWORD       dwNumAddrs;
  224. } MIB_UDPSTATS,*PMIB_UDPSTATS;
  225.  
  226. typedef struct _MIB_UDPROW
  227. {
  228.     DWORD       dwLocalAddr;
  229.     DWORD       dwLocalPort;
  230. } MIB_UDPROW, *PMIB_UDPROW;
  231.  
  232. typedef struct _MIB_UDPTABLE
  233. {
  234.     DWORD       dwNumEntries;
  235.     MIB_UDPROW  table[ANY_SIZE];
  236. } MIB_UDPTABLE, *PMIB_UDPTABLE;
  237.  
  238. #define SIZEOF_UDPTABLE(X) (FIELD_OFFSET(MIB_UDPTABLE, table[0]) + ((X) * sizeof(MIB_UDPROW)) + ALIGN_SIZE)
  239.  
  240. typedef struct _MIB_TCPSTATS
  241. {
  242.     DWORD       dwRtoAlgorithm;
  243.     DWORD       dwRtoMin;
  244.     DWORD       dwRtoMax;
  245.     DWORD       dwMaxConn;
  246.     DWORD       dwActiveOpens;
  247.     DWORD       dwPassiveOpens;
  248.     DWORD       dwAttemptFails;
  249.     DWORD       dwEstabResets;
  250.     DWORD       dwCurrEstab;
  251.     DWORD       dwInSegs;
  252.     DWORD       dwOutSegs;
  253.     DWORD       dwRetransSegs;
  254.     DWORD       dwInErrs;
  255.     DWORD       dwOutRsts;
  256.     DWORD       dwNumConns;
  257. } MIB_TCPSTATS, *PMIB_TCPSTATS;
  258.  
  259. #define MIB_TCP_RTO_OTHER       1
  260. #define MIB_TCP_RTO_CONSTANT    2
  261. #define MIB_TCP_RTO_RSRE        3
  262. #define MIB_TCP_RTO_VANJ        4
  263.  
  264. #define MIB_TCP_MAXCONN_DYNAMIC (DWORD)-1
  265.  
  266. typedef struct _MIB_TCPROW
  267. {
  268.     DWORD       dwState;
  269.     DWORD       dwLocalAddr;
  270.     DWORD       dwLocalPort;
  271.     DWORD       dwRemoteAddr;
  272.     DWORD       dwRemotePort;
  273. } MIB_TCPROW, *PMIB_TCPROW;
  274.  
  275. #define MIB_TCP_STATE_CLOSED            1
  276. #define MIB_TCP_STATE_LISTEN            2
  277. #define MIB_TCP_STATE_SYN_SENT          3
  278. #define MIB_TCP_STATE_SYN_RCVD          4
  279. #define MIB_TCP_STATE_ESTAB             5
  280. #define MIB_TCP_STATE_FIN_WAIT1         6
  281. #define MIB_TCP_STATE_FIN_WAIT2         7
  282. #define MIB_TCP_STATE_CLOSE_WAIT        8
  283. #define MIB_TCP_STATE_CLOSING           9
  284. #define MIB_TCP_STATE_LAST_ACK         10
  285. #define MIB_TCP_STATE_TIME_WAIT        11
  286. #define MIB_TCP_STATE_DELETE_TCB       12
  287.  
  288. typedef struct _MIB_TCPTABLE
  289. {
  290.     DWORD      dwNumEntries;
  291.     MIB_TCPROW table[ANY_SIZE];
  292. } MIB_TCPTABLE, *PMIB_TCPTABLE;
  293.  
  294. #define SIZEOF_TCPTABLE(X) (FIELD_OFFSET(MIB_TCPTABLE,table[0]) + ((X) * sizeof(MIB_TCPROW)) + ALIGN_SIZE)
  295.  
  296. #define MIB_USE_CURRENT_TTL         ((DWORD)-1)
  297. #define MIB_USE_CURRENT_FORWARDING  ((DWORD)-1)
  298.  
  299. typedef struct _MIB_IPSTATS
  300. {
  301.     DWORD        dwForwarding;
  302.     DWORD        dwDefaultTTL;
  303.     DWORD        dwInReceives;
  304.     DWORD        dwInHdrErrors;
  305.     DWORD        dwInAddrErrors;
  306.     DWORD        dwForwDatagrams;
  307.     DWORD        dwInUnknownProtos;
  308.     DWORD        dwInDiscards;
  309.     DWORD        dwInDelivers;
  310.     DWORD        dwOutRequests;
  311.     DWORD        dwRoutingDiscards;
  312.     DWORD        dwOutDiscards;
  313.     DWORD        dwOutNoRoutes;
  314.     DWORD        dwReasmTimeout;
  315.     DWORD        dwReasmReqds;
  316.     DWORD        dwReasmOks;
  317.     DWORD        dwReasmFails;
  318.     DWORD        dwFragOks;
  319.     DWORD        dwFragFails;
  320.     DWORD        dwFragCreates;
  321.     DWORD        dwNumIf;
  322.     DWORD        dwNumAddr;
  323.     DWORD        dwNumRoutes;
  324. } MIB_IPSTATS, *PMIB_IPSTATS;
  325.  
  326. #define    MIB_IP_FORWARDING               1
  327. #define    MIB_IP_NOT_FORWARDING           2
  328.  
  329.  
  330. typedef struct _MIB_IPADDRROW
  331. {
  332.     DWORD        dwAddr;
  333.     DWORD        dwIndex;
  334.     DWORD        dwMask;
  335.     DWORD        dwBCastAddr;
  336.     DWORD        dwReasmSize;
  337.     unsigned short    unused1;
  338.     unsigned short    unused2;
  339. } MIB_IPADDRROW, *PMIB_IPADDRROW;
  340.  
  341. typedef struct _MIB_IPADDRTABLE
  342. {
  343.     DWORD         dwNumEntries;
  344.     MIB_IPADDRROW table[ANY_SIZE];
  345. } MIB_IPADDRTABLE, *PMIB_IPADDRTABLE;
  346.  
  347.  
  348. #define SIZEOF_IPADDRTABLE(X) (FIELD_OFFSET(MIB_IPADDRTABLE,table[0]) + ((X) * sizeof(MIB_IPADDRROW)) + ALIGN_SIZE)
  349.  
  350.  
  351. typedef struct _MIB_IPFORWARDNUMBER
  352. {
  353.     DWORD      dwValue;
  354. }MIB_IPFORWARDNUMBER,*PMIB_IPFORWARDNUMBER;
  355.  
  356. typedef struct _MIB_IPFORWARDROW
  357. {
  358.     DWORD        dwForwardDest;
  359.     DWORD        dwForwardMask;
  360.     DWORD        dwForwardPolicy;
  361.     DWORD        dwForwardNextHop;
  362.     DWORD        dwForwardIfIndex;
  363.     DWORD        dwForwardType;
  364.     DWORD        dwForwardProto;
  365.     DWORD        dwForwardAge;
  366.     DWORD       dwForwardNextHopAS;
  367.     DWORD        dwForwardMetric1;
  368.     DWORD        dwForwardMetric2;
  369.     DWORD        dwForwardMetric3;
  370.     DWORD        dwForwardMetric4;
  371.     DWORD        dwForwardMetric5;
  372. }MIB_IPFORWARDROW, *PMIB_IPFORWARDROW;
  373.  
  374. #define    MIB_IPROUTE_TYPE_OTHER        1
  375. #define    MIB_IPROUTE_TYPE_INVALID    2
  376. #define    MIB_IPROUTE_TYPE_DIRECT        3
  377. #define    MIB_IPROUTE_TYPE_INDIRECT    4
  378.  
  379. #define    MIB_IPROUTE_METRIC_UNUSED    (DWORD)-1
  380.  
  381. //
  382. // THESE MUST MATCH the ids in routprot.h
  383. //
  384.  
  385. #define MIB_IPPROTO_OTHER                1
  386. #define MIB_IPPROTO_LOCAL                2
  387. #define MIB_IPPROTO_NETMGMT                3
  388. #define MIB_IPPROTO_ICMP                4
  389. #define MIB_IPPROTO_EGP                    5
  390. #define MIB_IPPROTO_GGP                    6
  391. #define MIB_IPPROTO_HELLO                7
  392. #define MIB_IPPROTO_RIP                    8
  393. #define MIB_IPPROTO_IS_IS                9
  394. #define MIB_IPPROTO_ES_IS                10
  395. #define MIB_IPPROTO_CISCO                11
  396. #define MIB_IPPROTO_BBN                    12
  397. #define MIB_IPPROTO_OSPF                13
  398. #define MIB_IPPROTO_BGP                    14
  399.  
  400. #define MIB_IPPROTO_NT_AUTOSTATIC       10002
  401. #define MIB_IPPROTO_NT_STATIC           10006
  402. #define MIB_IPPROTO_NT_STATIC_NON_DOD   10007
  403.  
  404. typedef struct _MIB_IPFORWARDTABLE
  405. {
  406.     DWORD               dwNumEntries;
  407.     MIB_IPFORWARDROW    table[ANY_SIZE];
  408. }MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE;
  409.  
  410.  
  411.  
  412.  
  413. #define SIZEOF_IPFORWARDTABLE(X) (FIELD_OFFSET(MIB_IPFORWARDTABLE,table[0]) + ((X) * sizeof(MIB_IPFORWARDROW)) + ALIGN_SIZE)
  414.  
  415.  
  416. typedef struct _MIB_IPNETROW
  417. {
  418.     DWORD        dwIndex;
  419.     DWORD        dwPhysAddrLen;
  420.     BYTE        bPhysAddr[MAXLEN_PHYSADDR];
  421.     DWORD        dwAddr;
  422.     DWORD        dwType;
  423. } MIB_IPNETROW, *PMIB_IPNETROW;
  424.  
  425. #define    MIB_IPNET_TYPE_OTHER        1
  426. #define    MIB_IPNET_TYPE_INVALID        2
  427. #define    MIB_IPNET_TYPE_DYNAMIC        3
  428. #define    MIB_IPNET_TYPE_STATIC        4
  429.  
  430. typedef struct _MIB_IPNETTABLE
  431. {
  432.     DWORD             dwNumEntries;
  433.     MIB_IPNETROW      table[ANY_SIZE];
  434. } MIB_IPNETTABLE, *PMIB_IPNETTABLE;
  435.  
  436. #define SIZEOF_IPNETTABLE(X) (FIELD_OFFSET(MIB_IPNETTABLE, table[0]) + ((X) * sizeof(MIB_IPNETROW)) + ALIGN_SIZE)
  437.  
  438. typedef struct _MIB_IPMCAST_OIF
  439. {
  440.     DWORD   dwOutIfIndex;
  441.     DWORD   dwNextHopAddr;
  442.     PVOID   pvReserved;
  443.     DWORD   dwReserved;
  444. }MIB_IPMCAST_OIF, *PMIB_IPMCAST_OIF;
  445.  
  446. typedef struct _MIB_IPMCAST_MFE
  447. {
  448.     DWORD   dwGroup;
  449.     DWORD   dwSource;
  450.     DWORD   dwSrcMask;
  451.     DWORD   dwUpStrmNgbr;
  452.     DWORD   dwInIfIndex;
  453.     DWORD   dwInIfProtocol;
  454.     DWORD   dwRouteProtocol;
  455.     DWORD   dwRouteNetwork;
  456.     DWORD   dwRouteMask;
  457.     ULONG   ulUpTime;
  458.     ULONG   ulExpiryTime;
  459.     ULONG   ulTimeOut;
  460.     ULONG   ulNumOutIf;
  461.     DWORD   fFlags;
  462.     DWORD   dwReserved;
  463.     MIB_IPMCAST_OIF rgmioOutInfo[ANY_SIZE];
  464. }MIB_IPMCAST_MFE, *PMIB_IPMCAST_MFE;
  465.  
  466. typedef struct _MIB_MFE_TABLE
  467. {
  468.     DWORD           dwNumEntries;
  469.     MIB_IPMCAST_MFE table[ANY_SIZE];
  470. }MIB_MFE_TABLE, *PMIB_MFE_TABLE;
  471.  
  472.  
  473. #define SIZEOF_BASIC_MIB_MFE          \
  474.     (ULONG)(FIELD_OFFSET(MIB_IPMCAST_MFE, rgmioOutInfo[0]))
  475.  
  476. #define SIZEOF_MIB_MFE(X)             \
  477.     (SIZEOF_BASIC_MIB_MFE + ((X) * sizeof(MIB_IPMCAST_OIF)))
  478.  
  479.  
  480. typedef struct _MIB_IPMCAST_OIF_STATS
  481. {
  482.     DWORD   dwOutIfIndex;
  483.     DWORD   dwNextHopAddr;
  484.     PVOID   pvDialContext;
  485.     ULONG   ulTtlTooLow;
  486.     ULONG   ulFragNeeded;
  487.     ULONG   ulOutPackets;
  488.     ULONG   ulOutDiscards;
  489. }MIB_IPMCAST_OIF_STATS, *PMIB_IPMCAST_OIF_STATS;
  490.  
  491. typedef struct _MIB_IPMCAST_MFE_STATS
  492. {
  493.     DWORD   dwGroup;
  494.     DWORD   dwSource;
  495.     DWORD   dwSrcMask;
  496.     DWORD   dwUpStrmNgbr;
  497.     DWORD   dwInIfIndex;
  498.     DWORD   dwInIfProtocol;
  499.     DWORD   dwRouteProtocol;
  500.     DWORD   dwRouteNetwork;
  501.     DWORD   dwRouteMask;
  502.     ULONG   ulUpTime;
  503.     ULONG   ulExpiryTime;
  504.     ULONG   ulNumOutIf;
  505.     ULONG   ulInPkts;
  506.     ULONG   ulInOctets;
  507.     ULONG   ulPktsDifferentIf;
  508.     ULONG   ulQueueOverflow;
  509.     MIB_IPMCAST_OIF_STATS   rgmiosOutStats[ANY_SIZE];
  510. }MIB_IPMCAST_MFE_STATS, *PMIB_IPMCAST_MFE_STATS;
  511.  
  512. typedef struct _MIB_MFE_STATS_TABLE
  513. {
  514.     DWORD       dwNumEntries;
  515.     MIB_IPMCAST_MFE_STATS   table[ANY_SIZE];
  516. }MIB_MFE_STATS_TABLE, *PMIB_MFE_STATS_TABLE;
  517.  
  518. #define SIZEOF_BASIC_MIB_MFE_STATS    \
  519.     (ULONG)(FIELD_OFFSET(MIB_IPMCAST_MFE_STATS, rgmiosOutStats[0]))
  520.  
  521. #define SIZEOF_MIB_MFE_STATS(X)       \
  522.     (SIZEOF_BASIC_MIB_MFE_STATS + ((X) * sizeof(MIB_IPMCAST_OIF_STATS)))
  523.  
  524. typedef struct _MIB_IPMCAST_GLOBAL {
  525.     DWORD   dwEnable;
  526. }MIB_IPMCAST_GLOBAL, *PMIB_IPMCAST_GLOBAL;
  527.  
  528. typedef struct _MIB_IPMCAST_IF_ENTRY
  529. {
  530.     DWORD   dwIfIndex;
  531.     DWORD   dwTtl;
  532.     DWORD   dwProtocol;
  533.     DWORD   dwRateLimit;
  534.     ULONG   ulInMcastOctets;
  535.     ULONG   ulOutMcastOctets;
  536. }MIB_IPMCAST_IF_ENTRY, *PMIB_IPMCAST_IF_ENTRY;
  537.  
  538. typedef struct _MIB_IPMCAST_IF_TABLE
  539. {
  540.     DWORD       dwNumEntries;
  541.     MIB_IPMCAST_IF_ENTRY   table[ANY_SIZE];
  542. }MIB_IPMCAST_IF_TABLE, *PMIB_IPMCAST_IF_TABLE;
  543.  
  544. #define SIZEOF_MCAST_IF_TABLE(X) (FIELD_OFFSET(MIB_IPMCAST_IF_TABLE,table[0]) + ((X) * sizeof(MIB_IPMCAST_IF_ENTRY)) + ALIGN_SIZE)
  545.  
  546. typedef struct _MIB_IPMCAST_BOUNDARY
  547. {
  548.     DWORD   dwIfIndex;
  549.     DWORD   dwGroupAddress;
  550.     DWORD   dwGroupMask;
  551.     DWORD   dwStatus;
  552. }MIB_IPMCAST_BOUNDARY, *PMIB_IPMCAST_BOUNDARY;
  553.  
  554. typedef struct _MIB_IPMCAST_BOUNDARY_TABLE
  555. {
  556.     DWORD       dwNumEntries;
  557.     MIB_IPMCAST_BOUNDARY   table[ANY_SIZE];
  558. }MIB_IPMCAST_BOUNDARY_TABLE, *PMIB_IPMCAST_BOUNDARY_TABLE;
  559.  
  560. #define SIZEOF_BOUNDARY_TABLE(X) (FIELD_OFFSET(MIB_IPMCAST_BOUNDARY_TABLE,table[0]) + ((X) * sizeof(MIB_IPMCAST_BOUNDARY)) + ALIGN_SIZE)
  561.  
  562. typedef struct {
  563.     DWORD    dwGroupAddress;
  564.     DWORD    dwGroupMask;
  565. } MIB_BOUNDARYROW, *PMIB_BOUNDARYROW;
  566.  
  567. // Structure matching what goes in the registry in a block of type
  568. // IP_MCAST_LIMIT_INFO.  This contains the fields of
  569. // MIB_IPMCAST_IF_ENTRY which are configurable.
  570.  
  571. typedef struct {
  572.     DWORD    dwTtl;
  573.     DWORD    dwRateLimit;
  574. } MIB_MCAST_LIMIT_ROW, *PMIB_MCAST_LIMIT_ROW;
  575.  
  576. #define MAX_SCOPE_NAME_LEN 255
  577.  
  578. //
  579. // Scope names are unicode.  SNMP and MZAP use UTF-8 encoding.
  580. //
  581.  
  582. #define SN_UNICODE
  583. typedef WCHAR   SN_CHAR;
  584. typedef SN_CHAR SCOPE_NAME_BUFFER[MAX_SCOPE_NAME_LEN+1], *SCOPE_NAME;
  585.  
  586. typedef struct _MIB_IPMCAST_SCOPE
  587. {
  588.     DWORD             dwGroupAddress;
  589.     DWORD             dwGroupMask;
  590.     SCOPE_NAME_BUFFER snNameBuffer;
  591.     DWORD             dwStatus;
  592. }MIB_IPMCAST_SCOPE, *PMIB_IPMCAST_SCOPE;
  593.  
  594. typedef struct _MIB_IPDESTROW
  595. {
  596. #ifdef __cplusplus
  597.     MIB_IPFORWARDROW  ForwardRow;
  598. #else
  599.     MIB_IPFORWARDROW;
  600. #endif
  601.  
  602.     DWORD             dwForwardPreference;
  603.     DWORD             dwForwardViewSet;
  604. }MIB_IPDESTROW, *PMIB_IPDESTROW;
  605.  
  606. typedef struct _MIB_IPDESTTABLE
  607. {
  608.     DWORD             dwNumEntries;
  609.     MIB_IPDESTROW     table[ANY_SIZE];
  610. }MIB_IPDESTTABLE, *PMIB_IPDESTTABLE;
  611.  
  612. typedef struct _MIB_BEST_IF
  613. {
  614.     DWORD       dwDestAddr;
  615.     DWORD       dwIfIndex;
  616. }MIB_BEST_IF, *PMIB_BEST_IF;
  617.  
  618. typedef struct _MIB_PROXYARP
  619. {
  620.     DWORD       dwAddress;
  621.     DWORD       dwMask;
  622.     DWORD       dwIfIndex;
  623. }MIB_PROXYARP, *PMIB_PROXYARP;
  624.  
  625. typedef struct _MIB_IFSTATUS
  626. {
  627.     DWORD       dwIfIndex;
  628.     DWORD       dwAdminStatus;
  629.     DWORD       dwOperationalStatus;
  630.     BOOL        bMHbeatActive;
  631.     BOOL        bMHbeatAlive;
  632. }MIB_IFSTATUS, *PMIB_IFSTATUS;
  633.  
  634.  
  635. //////////////////////////////////////////////////////////////////////////////
  636. //                                                                          //
  637. // All the info passed to (SET/CREATE) and from (GET/GETNEXT/GETFIRST)      //
  638. // IP Router Manager is encapsulated in the following "discriminated"       //
  639. // union.  To pass, say MIB_IFROW, use the following code                   //
  640. //                                                                          //
  641. //  PMIB_OPAQUE_INFO    pInfo;                                              //
  642. //  PMIB_IFROW          pIfRow;                                             //
  643. //  DWORD rgdwBuff[(MAX_MIB_OFFSET + sizeof(MIB_IFROW))/sizeof(DWORD) + 1]; //
  644. //                                                                          //
  645. //  pInfo   = (PMIB_OPAQUE_INFO)rgdwBuffer;                                 //
  646. //  pIfRow  = (MIB_IFROW *)(pInfo->rgbyData);                               //
  647. //                                                                          //
  648. //  This can also be accomplished by using the following macro              //
  649. //                                                                          //
  650. //  DEFINE_MIB_BUFFER(pInfo,MIB_IFROW, pIfRow);                             //
  651. //                                                                          //
  652. //////////////////////////////////////////////////////////////////////////////
  653.  
  654.  
  655. typedef struct _MIB_OPAQUE_INFO
  656. {
  657.     DWORD  dwId;
  658.  
  659.     union
  660.     {
  661.         ULONGLONG   ullAlign;
  662.         BYTE        rgbyData[1];
  663.     };
  664.  
  665. }MIB_OPAQUE_INFO, *PMIB_OPAQUE_INFO;
  666.  
  667. #define MAX_MIB_OFFSET      8
  668.  
  669. #define MIB_INFO_SIZE(S)                \
  670.     (MAX_MIB_OFFSET + sizeof(S))
  671.  
  672. #define MIB_INFO_SIZE_IN_DWORDS(S)      \
  673.     ((MIB_INFO_SIZE(S))/sizeof(DWORD) + 1)
  674.  
  675. #define DEFINE_MIB_BUFFER(X,Y,Z)                                        \
  676.     DWORD        __rgdwBuff[MIB_INFO_SIZE_IN_DWORDS(Y)]; \
  677.     PMIB_OPAQUE_INFO    X = (PMIB_OPAQUE_INFO)__rgdwBuff;               \
  678.     Y *                 Z = (Y *)(X->rgbyData)
  679.  
  680.  
  681. #define CAST_MIB_INFO(X,Y,Z)    Z = (Y)(X->rgbyData)
  682.  
  683. #if _MSC_VER >= 1200
  684. #pragma warning(pop)
  685. #else
  686. #pragma warning(default:4201)
  687. #endif
  688.  
  689. #pragma option pop /*P_O_Pop*/
  690. #endif //__ROUTING_IPRTRMIB_H__
  691.