Iprtrmib.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:24k
源码类别:

模拟服务器

开发平台:

C/C++

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