Annotation of sbbs/include/microsoft/psdk/iprtrmib.h, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) Microsoft Corporation. All rights reserved.
                      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: #define __ROUTING_IPRTRMIB_H__
                     21: 
                     22: #if _MSC_VER > 1000
                     23: #pragma once
                     24: #endif
                     25: 
                     26: #if _MSC_VER >= 1200
                     27: #pragma warning(push)
                     28: #endif
                     29: #pragma warning(disable:4200)
                     30: #pragma warning(disable:4201)
                     31: #pragma warning(disable:4214)
                     32: 
                     33: //////////////////////////////////////////////////////////////////////////////
                     34: //                                                                          //
                     35: // Included to get the value of MAX_INTERFACE_NAME_LEN                      //
                     36: //                                                                          //
                     37: //////////////////////////////////////////////////////////////////////////////
                     38: 
                     39: #include <mprapi.h>
                     40: 
                     41: //////////////////////////////////////////////////////////////////////////////
                     42: //                                                                          //
                     43: // Included to get the necessary constants                                  //
                     44: //                                                                          //
                     45: //////////////////////////////////////////////////////////////////////////////
                     46: 
                     47: #include <ipifcons.h>
                     48: 
                     49: //////////////////////////////////////////////////////////////////////////////
                     50: //                                                                          //
                     51: // This is the Id for IP Router Manager.  The Router Manager handles        //
                     52: // MIB-II, Forwarding MIB and some enterprise specific information.         //
                     53: // Calls made with any other ID are passed on to the corresponding protocol //
                     54: // For example, an MprAdminMIBXXX call with a protocol ID of PID_IP and    //
                     55: // a routing Id of 0xD will be sent to the IP Router Manager and then       //
                     56: // forwarded to OSPF                                                        //
                     57: // This lives in the same number space as the protocol Ids of RIP, OSPF     //
                     58: // etc, so any change made to it should be done keeping this in mind        //
                     59: //                                                                          //
                     60: //////////////////////////////////////////////////////////////////////////////
                     61: 
                     62: 
                     63: #define IPRTRMGR_PID 10000
                     64: 
                     65: #ifndef ANY_SIZE
                     66: 
                     67: #define ANY_SIZE 1
                     68: 
                     69: #endif
                     70: 
                     71: #define TCPIP_OWNING_MODULE_SIZE 16
                     72: 
                     73: //////////////////////////////////////////////////////////////////////////////
                     74: //                                                                          //
                     75: // The following #defines are the Ids of the MIB variables made accessible  //
                     76: // to the user via MprAdminMIBXXX Apis.  It will be noticed that these are  //
                     77: // not the same as RFC 1213, since the MprAdminMIBXXX APIs work on rows and //
                     78: // groups instead of scalar variables                                       //
                     79: //                                                                          //
                     80: //////////////////////////////////////////////////////////////////////////////
                     81: 
                     82: 
                     83: #define IF_NUMBER           0
                     84: #define IF_TABLE            (IF_NUMBER          + 1)
                     85: #define IF_ROW              (IF_TABLE           + 1)
                     86: #define IP_STATS            (IF_ROW             + 1)
                     87: #define IP_ADDRTABLE        (IP_STATS           + 1)
                     88: #define IP_ADDRROW          (IP_ADDRTABLE       + 1)
                     89: #define IP_FORWARDNUMBER    (IP_ADDRROW         + 1)
                     90: #define IP_FORWARDTABLE     (IP_FORWARDNUMBER   + 1)
                     91: #define IP_FORWARDROW       (IP_FORWARDTABLE    + 1)
                     92: #define IP_NETTABLE         (IP_FORWARDROW      + 1)
                     93: #define IP_NETROW           (IP_NETTABLE        + 1)
                     94: #define ICMP_STATS          (IP_NETROW          + 1)
                     95: #define TCP_STATS           (ICMP_STATS         + 1)
                     96: #define TCP_TABLE           (TCP_STATS          + 1)
                     97: #define TCP_ROW             (TCP_TABLE          + 1)
                     98: #define UDP_STATS           (TCP_ROW            + 1)
                     99: #define UDP_TABLE           (UDP_STATS          + 1)
                    100: #define UDP_ROW             (UDP_TABLE          + 1)
                    101: #define MCAST_MFE           (UDP_ROW            + 1)
                    102: #define MCAST_MFE_STATS     (MCAST_MFE          + 1)
                    103: #define BEST_IF             (MCAST_MFE_STATS    + 1)
                    104: #define BEST_ROUTE          (BEST_IF            + 1)
                    105: #define PROXY_ARP           (BEST_ROUTE         + 1)
                    106: #define MCAST_IF_ENTRY      (PROXY_ARP          + 1)
                    107: #define MCAST_GLOBAL        (MCAST_IF_ENTRY     + 1)
                    108: #define IF_STATUS           (MCAST_GLOBAL       + 1)
                    109: #define MCAST_BOUNDARY      (IF_STATUS          + 1)
                    110: #define MCAST_SCOPE         (MCAST_BOUNDARY     + 1)
                    111: #define DEST_MATCHING       (MCAST_SCOPE        + 1)
                    112: #define DEST_LONGER         (DEST_MATCHING      + 1)
                    113: #define DEST_SHORTER        (DEST_LONGER        + 1)
                    114: #define ROUTE_MATCHING      (DEST_SHORTER       + 1)
                    115: #define ROUTE_LONGER        (ROUTE_MATCHING     + 1)
                    116: #define ROUTE_SHORTER       (ROUTE_LONGER       + 1)
                    117: #define ROUTE_STATE         (ROUTE_SHORTER      + 1)
                    118: #define MCAST_MFE_STATS_EX  (ROUTE_STATE        + 1)
                    119: #define IP6_STATS           (MCAST_MFE_STATS_EX + 1)
                    120: #define UDP6_STATS          (IP6_STATS          + 1)
                    121: #define TCP6_STATS          (UDP6_STATS         + 1)
                    122: 
                    123: #define NUMBER_OF_EXPORTED_VARIABLES    (TCP6_STATS + 1)
                    124: 
                    125: 
                    126: //////////////////////////////////////////////////////////////////////////////
                    127: //                                                                          //
                    128: // MIB_OPAQUE_QUERY is the structure filled in by the user to identify a    //
                    129: // MIB variable                                                             //
                    130: //                                                                          //
                    131: //  dwVarId     ID of MIB Variable (One of the Ids #defined above)          //
                    132: //  dwVarIndex  Variable sized array containing the indices needed to       //
                    133: //              identify a variable. NOTE: Unlike SNMP we dont require that //
                    134: //              a scalar variable be indexed by 0                           //
                    135: //                                                                          //
                    136: //////////////////////////////////////////////////////////////////////////////
                    137: 
                    138: typedef struct _MIB_OPAQUE_QUERY
                    139: {
                    140:     DWORD  dwVarId;
                    141:     DWORD  rgdwVarIndex[ANY_SIZE];
                    142: }MIB_OPAQUE_QUERY, *PMIB_OPAQUE_QUERY;
                    143: 
                    144: //////////////////////////////////////////////////////////////////////////////
                    145: //                                                                          //
                    146: // The following are the structures which are filled in and returned to the //
                    147: // user when a query is made, OR  are filled in BY THE USER when a set is   //
                    148: // done                                                                     //
                    149: //                                                                          //
                    150: //////////////////////////////////////////////////////////////////////////////
                    151: 
                    152: typedef struct _MIB_IFNUMBER
                    153: {
                    154:     DWORD    dwValue;
                    155: } MIB_IFNUMBER, *PMIB_IFNUMBER;
                    156: 
                    157: 
                    158: #define MAXLEN_IFDESCR 256
                    159: #define MAXLEN_PHYSADDR 8
                    160: 
                    161: typedef struct _MIB_IFROW
                    162: {
                    163:     WCHAR   wszName[MAX_INTERFACE_NAME_LEN];
                    164:     DWORD    dwIndex;
                    165:     DWORD    dwType;
                    166:     DWORD    dwMtu;
                    167:     DWORD    dwSpeed;
                    168:     DWORD    dwPhysAddrLen;
                    169:     BYTE    bPhysAddr[MAXLEN_PHYSADDR];
                    170:     DWORD    dwAdminStatus;
                    171:     DWORD    dwOperStatus;
                    172:     DWORD    dwLastChange;
                    173:     DWORD    dwInOctets;
                    174:     DWORD    dwInUcastPkts;
                    175:     DWORD    dwInNUcastPkts;
                    176:     DWORD    dwInDiscards;
                    177:     DWORD    dwInErrors;
                    178:     DWORD    dwInUnknownProtos;
                    179:     DWORD    dwOutOctets;
                    180:     DWORD    dwOutUcastPkts;
                    181:     DWORD    dwOutNUcastPkts;
                    182:     DWORD    dwOutDiscards;
                    183:     DWORD    dwOutErrors;
                    184:     DWORD    dwOutQLen;
                    185:     DWORD    dwDescrLen;
                    186:     BYTE    bDescr[MAXLEN_IFDESCR];
                    187: } MIB_IFROW,*PMIB_IFROW;
                    188: 
                    189: typedef struct _MIB_IFTABLE
                    190: {
                    191:     DWORD     dwNumEntries;
                    192:     MIB_IFROW table[ANY_SIZE];
                    193: } MIB_IFTABLE, *PMIB_IFTABLE;
                    194: 
                    195: #define SIZEOF_IFTABLE(X) (FIELD_OFFSET(MIB_IFTABLE,table[0]) + ((X) * sizeof(MIB_IFROW)) + ALIGN_SIZE)
                    196: 
                    197: typedef struct _MIBICMPSTATS
                    198: {
                    199:     DWORD        dwMsgs;
                    200:     DWORD        dwErrors;
                    201:     DWORD        dwDestUnreachs;
                    202:     DWORD        dwTimeExcds;
                    203:     DWORD        dwParmProbs;
                    204:     DWORD        dwSrcQuenchs;
                    205:     DWORD        dwRedirects;
                    206:     DWORD        dwEchos;
                    207:     DWORD        dwEchoReps;
                    208:     DWORD        dwTimestamps;
                    209:     DWORD        dwTimestampReps;
                    210:     DWORD        dwAddrMasks;
                    211:     DWORD        dwAddrMaskReps;
                    212: } MIBICMPSTATS, *PMIBICMPSTATS;
                    213: 
                    214: typedef    struct _MIBICMPINFO
                    215: {
                    216:     MIBICMPSTATS    icmpInStats;
                    217:     MIBICMPSTATS    icmpOutStats;
                    218: } MIBICMPINFO;
                    219: 
                    220: typedef struct _MIB_ICMP
                    221: {
                    222:     MIBICMPINFO stats;
                    223: } MIB_ICMP,*PMIB_ICMP;
                    224: 
                    225: //
                    226: // ICMPv6 Type Values from RFC 2292.
                    227: //
                    228: typedef enum {
                    229:     ICMP6_DST_UNREACH          =   1,
                    230:     ICMP6_PACKET_TOO_BIG       =   2,
                    231:     ICMP6_TIME_EXCEEDED        =   3,
                    232:     ICMP6_PARAM_PROB           =   4,
                    233:     ICMP6_ECHO_REQUEST         = 128,
                    234:     ICMP6_ECHO_REPLY           = 129,
                    235:     ICMP6_MEMBERSHIP_QUERY     = 130,
                    236:     ICMP6_MEMBERSHIP_REPORT    = 131,
                    237:     ICMP6_MEMBERSHIP_REDUCTION = 132,
                    238:     ND_ROUTER_SOLICIT          = 133,
                    239:     ND_ROUTER_ADVERT           = 134,
                    240:     ND_NEIGHBOR_SOLICIT        = 135,
                    241:     ND_NEIGHBOR_ADVERT         = 136,
                    242:     ND_REDIRECT                = 137,
                    243: } ICMP6_TYPE, *PICMP6_TYPE;
                    244: 
                    245: //
                    246: // There are no RFC-specified defines for ICMPv4 message types, so we try to
                    247: // use the ICMP6 values from RFC 2292 modified to be prefixed with ICMP4.
                    248: //
                    249: typedef enum {
                    250:     ICMP4_ECHO_REPLY        =  0, // Echo Reply
                    251:     ICMP4_DST_UNREACH       =  3, // Destination Unreachable
                    252:     ICMP4_SOURCE_QUENCH     =  4, // Source Quench
                    253:     ICMP4_REDIRECT          =  5, // Redirect
                    254:     ICMP4_ECHO_REQUEST      =  8, // Echo Request
                    255:     ICMP4_ROUTER_ADVERT     =  9, // Router Advertisement
                    256:     ICMP4_ROUTER_SOLICIT    = 10, // Router Solicitation
                    257:     ICMP4_TIME_EXCEEDED     = 11, // Time Exceeded
                    258:     ICMP4_PARAM_PROB        = 12, // Parameter Problem
                    259:     ICMP4_TIMESTAMP_REQUEST = 13, // Timestamp Request
                    260:     ICMP4_TIMESTAMP_REPLY   = 14, // Timestamp Reply
                    261:     ICMP4_MASK_REQUEST      = 17, // Address Mask Request
                    262:     ICMP4_MASK_REPLY        = 18, // Address Mask Reply
                    263: } ICMP4_TYPE, *PICMP4_TYPE;
                    264: 
                    265: typedef struct _MIBICMPSTATS_EX
                    266: {
                    267:     DWORD       dwMsgs;
                    268:     DWORD       dwErrors;
                    269:     DWORD       rgdwTypeCount[256];
                    270: } MIBICMPSTATS_EX, *PMIBICMPSTATS_EX;
                    271: 
                    272: typedef struct _MIB_ICMP_EX
                    273: {
                    274:     MIBICMPSTATS_EX icmpInStats;
                    275:     MIBICMPSTATS_EX icmpOutStats;
                    276: } MIB_ICMP_EX,*PMIB_ICMP_EX;
                    277: 
                    278: typedef struct _MIB_UDPSTATS
                    279: {
                    280:     DWORD       dwInDatagrams;
                    281:     DWORD       dwNoPorts;
                    282:     DWORD       dwInErrors;
                    283:     DWORD       dwOutDatagrams;
                    284:     DWORD       dwNumAddrs;
                    285: } MIB_UDPSTATS,*PMIB_UDPSTATS;
                    286: 
                    287: typedef struct _MIB_UDPROW
                    288: {
                    289:     DWORD       dwLocalAddr;
                    290:     DWORD       dwLocalPort;
                    291: } MIB_UDPROW, *PMIB_UDPROW;
                    292: 
                    293: typedef MIB_UDPROW MIB_UDPROW_BASIC, *PMIB_UDPROW_BASIC;
                    294: 
                    295: typedef struct _MIB_UDPROW_OWNER_PID
                    296: {
                    297:     DWORD           dwLocalAddr;
                    298:     DWORD           dwLocalPort;
                    299:     DWORD           dwOwningPid;
                    300: } MIB_UDPROW_OWNER_PID, *PMIB_UDPROW_OWNER_PID;
                    301: 
                    302: typedef struct _MIB_UDPROW_OWNER_MODULE
                    303: {
                    304:     DWORD           dwLocalAddr;
                    305:     DWORD           dwLocalPort;
                    306:     DWORD           dwOwningPid;
                    307:     LARGE_INTEGER   liCreateTimestamp;
                    308:     union {
                    309:         struct {
                    310:             DWORD   SpecificPortBind : 1;
                    311:         };
                    312:         DWORD       dwFlags;
                    313:     };
                    314:     ULONGLONG       OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
                    315: } MIB_UDPROW_OWNER_MODULE, *PMIB_UDPROW_OWNER_MODULE;
                    316: 
                    317: typedef struct _MIB_UDP6ROW_OWNER_PID
                    318: {
                    319:     UCHAR           ucLocalAddr[16];
                    320:     DWORD           dwLocalScopeId;
                    321:     DWORD           dwLocalPort;
                    322:     DWORD           dwOwningPid;
                    323: } MIB_UDP6ROW_OWNER_PID, *PMIB_UDP6ROW_OWNER_PID;
                    324: 
                    325: typedef struct _MIB_UDP6ROW_OWNER_MODULE
                    326: {
                    327:     UCHAR           ucLocalAddr[16];
                    328:     DWORD           dwLocalScopeId;
                    329:     DWORD           dwLocalPort;
                    330:     DWORD           dwOwningPid;
                    331:     LARGE_INTEGER   liCreateTimestamp;
                    332:     union {
                    333:         struct {
                    334:             DWORD   SpecificPortBind : 1;
                    335:         };
                    336:         DWORD       dwFlags;
                    337:     };
                    338:     ULONGLONG       OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
                    339: } MIB_UDP6ROW_OWNER_MODULE, *PMIB_UDP6ROW_OWNER_MODULE;
                    340: 
                    341: typedef struct _MIB_UDPTABLE
                    342: {
                    343:     DWORD       dwNumEntries;
                    344:     MIB_UDPROW  table[ANY_SIZE];
                    345: } MIB_UDPTABLE, *PMIB_UDPTABLE;
                    346: 
                    347: typedef MIB_UDPTABLE MIB_UDPTABLE_BASIC, *PMIB_UDPTABLE_BASIC;
                    348: 
                    349: #define SIZEOF_UDPTABLE(X) (FIELD_OFFSET(MIB_UDPTABLE, table[0]) + ((X) * sizeof(MIB_UDPROW)) + ALIGN_SIZE)
                    350: 
                    351: #define SIZEOF_UDPTABLE_BASIC(X) SIZEOF_UDPTABLE(X)
                    352: 
                    353: typedef struct _MIB_UDPTABLE_OWNER_PID
                    354: {
                    355:     DWORD                   dwNumEntries;
                    356:     MIB_UDPROW_OWNER_PID    table[ANY_SIZE];
                    357: } MIB_UDPTABLE_OWNER_PID, *PMIB_UDPTABLE_OWNER_PID;
                    358: 
                    359: #define SIZEOF_UDPTABLE_OWNER_PID(X) (FIELD_OFFSET(MIB_UDPTABLE_OWNER_PID, table[0]) + ((X) * sizeof(MIB_UDPROW_OWNER_PID)) + ALIGN_SIZE)
                    360: 
                    361: typedef struct _MIB_UDPTABLE_OWNER_MODULE
                    362: {
                    363:     DWORD                   dwNumEntries;
                    364:     MIB_UDPROW_OWNER_MODULE table[ANY_SIZE];
                    365: } MIB_UDPTABLE_OWNER_MODULE, *PMIB_UDPTABLE_OWNER_MODULE;
                    366: 
                    367: #define SIZEOF_UDPTABLE_OWNER_MODULE(X) (FIELD_OFFSET(MIB_UDPTABLE_OWNER_MODULE, table[0]) + ((X) * sizeof(MIB_UDPROW_OWNER_MODULE)) + ALIGN_SIZE)
                    368: 
                    369: typedef struct _MIB_UDP6TABLE_OWNER_PID
                    370: {
                    371:     DWORD                   dwNumEntries;
                    372:     MIB_UDP6ROW_OWNER_PID   table[ANY_SIZE];
                    373: } MIB_UDP6TABLE_OWNER_PID, *PMIB_UDP6TABLE_OWNER_PID;
                    374: 
                    375: #define SIZEOF_UDP6TABLE_OWNER_PID(X) (FIELD_OFFSET(MIB_UDP6TABLE_OWNER_PID, table[0]) + ((X) * sizeof(MIB_UDP6ROW_OWNER_PID)) + ALIGN_SIZE)
                    376: 
                    377: typedef struct _MIB_UDP6TABLE_OWNER_MODULE
                    378: {
                    379:     DWORD                    dwNumEntries;
                    380:     MIB_UDP6ROW_OWNER_MODULE table[ANY_SIZE];
                    381: } MIB_UDP6TABLE_OWNER_MODULE, *PMIB_UDP6TABLE_OWNER_MODULE;
                    382: 
                    383: #define SIZEOF_UDP6TABLE_OWNER_MODULE(X) (FIELD_OFFSET(MIB_UDP6TABLE_OWNER_MODULE, table[0]) + ((X) * sizeof(MIB_UDP6ROW_OWNER_MODULE)) + ALIGN_SIZE)
                    384: 
                    385: typedef struct _MIB_TCPSTATS
                    386: {
                    387:     DWORD       dwRtoAlgorithm;
                    388:     DWORD       dwRtoMin;
                    389:     DWORD       dwRtoMax;
                    390:     DWORD       dwMaxConn;
                    391:     DWORD       dwActiveOpens;
                    392:     DWORD       dwPassiveOpens;
                    393:     DWORD       dwAttemptFails;
                    394:     DWORD       dwEstabResets;
                    395:     DWORD       dwCurrEstab;
                    396:     DWORD       dwInSegs;
                    397:     DWORD       dwOutSegs;
                    398:     DWORD       dwRetransSegs;
                    399:     DWORD       dwInErrs;
                    400:     DWORD       dwOutRsts;
                    401:     DWORD       dwNumConns;
                    402: } MIB_TCPSTATS, *PMIB_TCPSTATS;
                    403: 
                    404: #define MIB_TCP_RTO_OTHER       1
                    405: #define MIB_TCP_RTO_CONSTANT    2
                    406: #define MIB_TCP_RTO_RSRE        3
                    407: #define MIB_TCP_RTO_VANJ        4
                    408: 
                    409: #define MIB_TCP_MAXCONN_DYNAMIC (DWORD)-1
                    410: 
                    411: typedef struct _MIB_TCPROW
                    412: {
                    413:     DWORD       dwState;
                    414:     DWORD       dwLocalAddr;
                    415:     DWORD       dwLocalPort;
                    416:     DWORD       dwRemoteAddr;
                    417:     DWORD       dwRemotePort;
                    418: } MIB_TCPROW, *PMIB_TCPROW;
                    419: 
                    420: typedef MIB_TCPROW MIB_TCPROW_BASIC, *PMIB_TCPROW_BASIC;
                    421: 
                    422: typedef struct _MIB_TCPROW_OWNER_PID
                    423: {
                    424:     DWORD       dwState;
                    425:     DWORD       dwLocalAddr;
                    426:     DWORD       dwLocalPort;
                    427:     DWORD       dwRemoteAddr;
                    428:     DWORD       dwRemotePort;
                    429:     DWORD       dwOwningPid;
                    430: } MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
                    431: 
                    432: 
                    433: typedef struct _MIB_TCPROW_OWNER_MODULE
                    434: {
                    435:     DWORD           dwState;
                    436:     DWORD           dwLocalAddr;
                    437:     DWORD           dwLocalPort;
                    438:     DWORD           dwRemoteAddr;
                    439:     DWORD           dwRemotePort;
                    440:     DWORD           dwOwningPid;
                    441:     LARGE_INTEGER   liCreateTimestamp;
                    442:     ULONGLONG       OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
                    443: } MIB_TCPROW_OWNER_MODULE, *PMIB_TCPROW_OWNER_MODULE;
                    444: 
                    445: typedef struct _MIB_TCP6ROW_OWNER_PID
                    446: {
                    447:     UCHAR           ucLocalAddr[16];
                    448:     DWORD           dwLocalScopeId;
                    449:     DWORD           dwLocalPort;
                    450:     UCHAR           ucRemoteAddr[16];
                    451:     DWORD           dwRemoteScopeId;
                    452:     DWORD           dwRemotePort;
                    453:     DWORD           dwState;
                    454:     DWORD           dwOwningPid;
                    455: } MIB_TCP6ROW_OWNER_PID, *PMIB_TCP6ROW_OWNER_PID;
                    456: 
                    457: typedef struct _MIB_TCP6ROW_OWNER_MODULE
                    458: {
                    459:     UCHAR           ucLocalAddr[16];
                    460:     DWORD           dwLocalScopeId;
                    461:     DWORD           dwLocalPort;
                    462:     UCHAR           ucRemoteAddr[16];
                    463:     DWORD           dwRemoteScopeId;
                    464:     DWORD           dwRemotePort;
                    465:     DWORD           dwState;
                    466:     DWORD           dwOwningPid;
                    467:     LARGE_INTEGER   liCreateTimestamp;
                    468:     ULONGLONG       OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
                    469: } MIB_TCP6ROW_OWNER_MODULE, *PMIB_TCP6ROW_OWNER_MODULE;
                    470: 
                    471:     
                    472: #define MIB_TCP_STATE_CLOSED            1
                    473: #define MIB_TCP_STATE_LISTEN            2
                    474: #define MIB_TCP_STATE_SYN_SENT          3
                    475: #define MIB_TCP_STATE_SYN_RCVD          4
                    476: #define MIB_TCP_STATE_ESTAB             5
                    477: #define MIB_TCP_STATE_FIN_WAIT1         6
                    478: #define MIB_TCP_STATE_FIN_WAIT2         7
                    479: #define MIB_TCP_STATE_CLOSE_WAIT        8
                    480: #define MIB_TCP_STATE_CLOSING           9
                    481: #define MIB_TCP_STATE_LAST_ACK         10
                    482: #define MIB_TCP_STATE_TIME_WAIT        11
                    483: #define MIB_TCP_STATE_DELETE_TCB       12
                    484: 
                    485: typedef struct _MIB_TCPTABLE
                    486: {
                    487:     DWORD      dwNumEntries;
                    488:     MIB_TCPROW table[ANY_SIZE];
                    489: } MIB_TCPTABLE, *PMIB_TCPTABLE;
                    490: 
                    491: typedef MIB_TCPTABLE MIB_TCPTABLE_BASIC, *PMIB_TCPTABLE_BASIC;
                    492: 
                    493: #define SIZEOF_TCPTABLE(X) (FIELD_OFFSET(MIB_TCPTABLE,table[0]) + ((X) * sizeof(MIB_TCPROW)) + ALIGN_SIZE)
                    494: 
                    495: #define SIZEOF_TCPTABLE_BASIC(X) SIZEOF_TCPTABLE(X)
                    496: 
                    497: typedef struct _MIB_TCPTABLE_OWNER_PID
                    498: {
                    499:     DWORD                dwNumEntries;
                    500:     MIB_TCPROW_OWNER_PID table[ANY_SIZE];
                    501: } MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;
                    502: 
                    503: #define SIZEOF_TCPTABLE_OWNER_PID(X) (FIELD_OFFSET(MIB_TCPTABLE_OWNER_PID, table[0]) + ((X) * sizeof(MIB_TCPROW_OWNER_PID)) + ALIGN_SIZE)
                    504: 
                    505: typedef struct _MIB_TCPTABLE_OWNER_MODULE
                    506: {
                    507:     DWORD                   dwNumEntries;
                    508:     MIB_TCPROW_OWNER_MODULE table[ANY_SIZE];
                    509: } MIB_TCPTABLE_OWNER_MODULE, *PMIB_TCPTABLE_OWNER_MODULE;
                    510: 
                    511: #define SIZEOF_TCPTABLE_OWNER_MODULE(X) (FIELD_OFFSET(MIB_TCPTABLE_OWNER_MODULE, table[0]) + ((X) * sizeof(MIB_TCPROW_OWNER_MODULE)) + ALIGN_SIZE)
                    512: 
                    513: typedef struct _MIB_TCP6TABLE_OWNER_PID
                    514: {
                    515:     DWORD                   dwNumEntries;
                    516:     MIB_TCP6ROW_OWNER_PID   table[ANY_SIZE];
                    517: } MIB_TCP6TABLE_OWNER_PID, *PMIB_TCP6TABLE_OWNER_PID;
                    518: 
                    519: #define SIZEOF_TCP6TABLE_OWNER_PID(X) (FIELD_OFFSET(MIB_TCP6TABLE_OWNER_PID, table[0]) + ((X) * sizeof(MIB_TCP6ROW_OWNER_PID)) + ALIGN_SIZE)
                    520: 
                    521: typedef struct _MIB_TCP6TABLE_OWNER_MODULE
                    522: {
                    523:     DWORD                       dwNumEntries;
                    524:     MIB_TCP6ROW_OWNER_MODULE    table[ANY_SIZE];
                    525: } MIB_TCP6TABLE_OWNER_MODULE, *PMIB_TCP6TABLE_OWNER_MODULE;
                    526: 
                    527: #define SIZEOF_TCP6TABLE_OWNER_MODULE(X) (FIELD_OFFSET(MIB_TCP6TABLE_OWNER_MODULE, table[0]) + ((X) * sizeof(MIB_TCP6ROW_OWNER_PID)) + ALIGN_SIZE)
                    528: 
                    529: //
                    530: // Flags that describe the health of TCPIP with respect to security/DOS.
                    531: //
                    532: #define MIB_SECURITY_TCP_SYN_ATTACK 0x00000001
                    533: 
                    534: #define MIB_USE_CURRENT_TTL         ((DWORD)-1)
                    535: #define MIB_USE_CURRENT_FORWARDING  ((DWORD)-1)
                    536: 
                    537: typedef struct _MIB_IPSTATS
                    538: {
                    539:     DWORD        dwForwarding;
                    540:     DWORD        dwDefaultTTL;
                    541:     DWORD        dwInReceives;
                    542:     DWORD        dwInHdrErrors;
                    543:     DWORD        dwInAddrErrors;
                    544:     DWORD        dwForwDatagrams;
                    545:     DWORD        dwInUnknownProtos;
                    546:     DWORD        dwInDiscards;
                    547:     DWORD        dwInDelivers;
                    548:     DWORD        dwOutRequests;
                    549:     DWORD        dwRoutingDiscards;
                    550:     DWORD        dwOutDiscards;
                    551:     DWORD        dwOutNoRoutes;
                    552:     DWORD        dwReasmTimeout;
                    553:     DWORD        dwReasmReqds;
                    554:     DWORD        dwReasmOks;
                    555:     DWORD        dwReasmFails;
                    556:     DWORD        dwFragOks;
                    557:     DWORD        dwFragFails;
                    558:     DWORD        dwFragCreates;
                    559:     DWORD        dwNumIf;
                    560:     DWORD        dwNumAddr;
                    561:     DWORD        dwNumRoutes;
                    562: } MIB_IPSTATS, *PMIB_IPSTATS;
                    563: 
                    564: #define    MIB_IP_FORWARDING               1
                    565: #define    MIB_IP_NOT_FORWARDING           2
                    566: 
                    567: 
                    568: // Note: These addr types have dependency on ipdef.h
                    569: 
                    570: #define MIB_IPADDR_PRIMARY      0x0001   // Primary ipaddr
                    571: #define MIB_IPADDR_DYNAMIC      0x0004   // Dynamic ipaddr
                    572: #define MIB_IPADDR_DISCONNECTED 0x0008   // Address is on disconnected interface
                    573: #define MIB_IPADDR_DELETED      0x0040   // Address being deleted
                    574: #define MIB_IPADDR_TRANSIENT    0x0080   // Transient address
                    575: 
                    576: 
                    577: typedef struct _MIB_IPADDRROW
                    578: {
                    579:     DWORD        dwAddr;
                    580:     DWORD        dwIndex;
                    581:     DWORD        dwMask;
                    582:     DWORD        dwBCastAddr;
                    583:     DWORD        dwReasmSize;
                    584:     unsigned short    unused1;
                    585:     unsigned short    wType;
                    586: } MIB_IPADDRROW, *PMIB_IPADDRROW;
                    587: 
                    588: typedef struct _MIB_IPADDRTABLE
                    589: {
                    590:     DWORD         dwNumEntries;
                    591:     MIB_IPADDRROW table[ANY_SIZE];
                    592: } MIB_IPADDRTABLE, *PMIB_IPADDRTABLE;
                    593: 
                    594: 
                    595: #define SIZEOF_IPADDRTABLE(X) (FIELD_OFFSET(MIB_IPADDRTABLE,table[0]) + ((X) * sizeof(MIB_IPADDRROW)) + ALIGN_SIZE)
                    596: 
                    597: 
                    598: typedef struct _MIB_IPFORWARDNUMBER
                    599: {
                    600:     DWORD      dwValue;
                    601: }MIB_IPFORWARDNUMBER,*PMIB_IPFORWARDNUMBER;
                    602: 
                    603: typedef struct _MIB_IPFORWARDROW
                    604: {
                    605:     DWORD        dwForwardDest;
                    606:     DWORD        dwForwardMask;
                    607:     DWORD        dwForwardPolicy;
                    608:     DWORD        dwForwardNextHop;
                    609:     DWORD        dwForwardIfIndex;
                    610:     DWORD        dwForwardType;
                    611:     DWORD        dwForwardProto;
                    612:     DWORD        dwForwardAge;
                    613:     DWORD       dwForwardNextHopAS;
                    614:     DWORD        dwForwardMetric1;
                    615:     DWORD        dwForwardMetric2;
                    616:     DWORD        dwForwardMetric3;
                    617:     DWORD        dwForwardMetric4;
                    618:     DWORD        dwForwardMetric5;
                    619: }MIB_IPFORWARDROW, *PMIB_IPFORWARDROW;
                    620: 
                    621: #define    MIB_IPROUTE_TYPE_OTHER        1
                    622: #define    MIB_IPROUTE_TYPE_INVALID    2
                    623: #define    MIB_IPROUTE_TYPE_DIRECT        3
                    624: #define    MIB_IPROUTE_TYPE_INDIRECT    4
                    625: 
                    626: #define    MIB_IPROUTE_METRIC_UNUSED    (DWORD)-1
                    627: 
                    628: //
                    629: // THESE MUST MATCH the ids in routprot.h
                    630: //
                    631: 
                    632: #define MIB_IPPROTO_OTHER                1
                    633: #define MIB_IPPROTO_LOCAL                2
                    634: #define MIB_IPPROTO_NETMGMT                3
                    635: #define MIB_IPPROTO_ICMP                4
                    636: #define MIB_IPPROTO_EGP                    5
                    637: #define MIB_IPPROTO_GGP                    6
                    638: #define MIB_IPPROTO_HELLO                7
                    639: #define MIB_IPPROTO_RIP                    8
                    640: #define MIB_IPPROTO_IS_IS                9
                    641: #define MIB_IPPROTO_ES_IS                10
                    642: #define MIB_IPPROTO_CISCO                11
                    643: #define MIB_IPPROTO_BBN                    12
                    644: #define MIB_IPPROTO_OSPF                13
                    645: #define MIB_IPPROTO_BGP                    14
                    646: 
                    647: #define MIB_IPPROTO_NT_AUTOSTATIC       10002
                    648: #define MIB_IPPROTO_NT_STATIC           10006
                    649: #define MIB_IPPROTO_NT_STATIC_NON_DOD   10007
                    650: 
                    651: typedef struct _MIB_IPFORWARDTABLE
                    652: {
                    653:     DWORD               dwNumEntries;
                    654:     MIB_IPFORWARDROW    table[ANY_SIZE];
                    655: }MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE;
                    656: 
                    657: 
                    658: 
                    659: 
                    660: #define SIZEOF_IPFORWARDTABLE(X) (FIELD_OFFSET(MIB_IPFORWARDTABLE,table[0]) + ((X) * sizeof(MIB_IPFORWARDROW)) + ALIGN_SIZE)
                    661: 
                    662: 
                    663: typedef struct _MIB_IPNETROW
                    664: {
                    665:     DWORD        dwIndex;
                    666:     DWORD        dwPhysAddrLen;
                    667:     BYTE        bPhysAddr[MAXLEN_PHYSADDR];
                    668:     DWORD        dwAddr;
                    669:     DWORD        dwType;
                    670: } MIB_IPNETROW, *PMIB_IPNETROW;
                    671: 
                    672: #define    MIB_IPNET_TYPE_OTHER        1
                    673: #define    MIB_IPNET_TYPE_INVALID        2
                    674: #define    MIB_IPNET_TYPE_DYNAMIC        3
                    675: #define    MIB_IPNET_TYPE_STATIC        4
                    676: 
                    677: typedef struct _MIB_IPNETTABLE
                    678: {
                    679:     DWORD             dwNumEntries;
                    680:     MIB_IPNETROW      table[ANY_SIZE];
                    681: } MIB_IPNETTABLE, *PMIB_IPNETTABLE;
                    682: 
                    683: #define SIZEOF_IPNETTABLE(X) (FIELD_OFFSET(MIB_IPNETTABLE, table[0]) + ((X) * sizeof(MIB_IPNETROW)) + ALIGN_SIZE)
                    684: 
                    685: typedef struct _MIB_IPMCAST_OIF
                    686: {
                    687:     DWORD   dwOutIfIndex;
                    688:     DWORD   dwNextHopAddr;
                    689:     DWORD   dwReserved;
                    690:     DWORD   dwReserved1;
                    691: }MIB_IPMCAST_OIF, *PMIB_IPMCAST_OIF;
                    692: 
                    693: typedef struct _MIB_IPMCAST_MFE
                    694: {
                    695:     DWORD   dwGroup;
                    696:     DWORD   dwSource;
                    697:     DWORD   dwSrcMask;
                    698:     DWORD   dwUpStrmNgbr;
                    699:     DWORD   dwInIfIndex;
                    700:     DWORD   dwInIfProtocol;
                    701:     DWORD   dwRouteProtocol;
                    702:     DWORD   dwRouteNetwork;
                    703:     DWORD   dwRouteMask;
                    704:     ULONG   ulUpTime;
                    705:     ULONG   ulExpiryTime;
                    706:     ULONG   ulTimeOut;
                    707:     ULONG   ulNumOutIf;
                    708:     DWORD   fFlags;
                    709:     DWORD   dwReserved;
                    710:     MIB_IPMCAST_OIF rgmioOutInfo[ANY_SIZE];
                    711: }MIB_IPMCAST_MFE, *PMIB_IPMCAST_MFE;
                    712: 
                    713: typedef struct _MIB_MFE_TABLE
                    714: {
                    715:     DWORD           dwNumEntries;
                    716:     MIB_IPMCAST_MFE table[ANY_SIZE];
                    717: }MIB_MFE_TABLE, *PMIB_MFE_TABLE;
                    718: 
                    719: 
                    720: #define SIZEOF_BASIC_MIB_MFE          \
                    721:     (ULONG)(FIELD_OFFSET(MIB_IPMCAST_MFE, rgmioOutInfo[0]))
                    722: 
                    723: #define SIZEOF_MIB_MFE(X)             \
                    724:     (SIZEOF_BASIC_MIB_MFE + ((X) * sizeof(MIB_IPMCAST_OIF)))
                    725: 
                    726: 
                    727: typedef struct _MIB_IPMCAST_OIF_STATS
                    728: {
                    729:     DWORD   dwOutIfIndex;
                    730:     DWORD   dwNextHopAddr;
                    731:     DWORD   dwDialContext;
                    732:     ULONG   ulTtlTooLow;
                    733:     ULONG   ulFragNeeded;
                    734:     ULONG   ulOutPackets;
                    735:     ULONG   ulOutDiscards;
                    736: }MIB_IPMCAST_OIF_STATS, *PMIB_IPMCAST_OIF_STATS;
                    737: 
                    738: typedef struct _MIB_IPMCAST_MFE_STATS
                    739: {
                    740:     DWORD   dwGroup;
                    741:     DWORD   dwSource;
                    742:     DWORD   dwSrcMask;
                    743:     DWORD   dwUpStrmNgbr;
                    744:     DWORD   dwInIfIndex;
                    745:     DWORD   dwInIfProtocol;
                    746:     DWORD   dwRouteProtocol;
                    747:     DWORD   dwRouteNetwork;
                    748:     DWORD   dwRouteMask;
                    749:     ULONG   ulUpTime;
                    750:     ULONG   ulExpiryTime;
                    751:     ULONG   ulNumOutIf;
                    752:     ULONG   ulInPkts;
                    753:     ULONG   ulInOctets;
                    754:     ULONG   ulPktsDifferentIf;
                    755:     ULONG   ulQueueOverflow;
                    756: 
                    757:     MIB_IPMCAST_OIF_STATS   rgmiosOutStats[ANY_SIZE];
                    758: }MIB_IPMCAST_MFE_STATS, *PMIB_IPMCAST_MFE_STATS;
                    759: 
                    760: typedef struct _MIB_MFE_STATS_TABLE
                    761: {
                    762:     DWORD       dwNumEntries;
                    763:     MIB_IPMCAST_MFE_STATS   table[ANY_SIZE];
                    764: }MIB_MFE_STATS_TABLE, *PMIB_MFE_STATS_TABLE;
                    765: 
                    766: #define SIZEOF_BASIC_MIB_MFE_STATS    \
                    767:     (ULONG)(FIELD_OFFSET(MIB_IPMCAST_MFE_STATS, rgmiosOutStats[0]))
                    768: 
                    769: #define SIZEOF_MIB_MFE_STATS(X)       \
                    770:     (SIZEOF_BASIC_MIB_MFE_STATS + ((X) * sizeof(MIB_IPMCAST_OIF_STATS)))
                    771: 
                    772: 
                    773: typedef struct _MIB_IPMCAST_MFE_STATS_EX
                    774: {
                    775:     DWORD   dwGroup;
                    776:     DWORD   dwSource;
                    777:     DWORD   dwSrcMask;
                    778:     DWORD   dwUpStrmNgbr;
                    779:     DWORD   dwInIfIndex;
                    780:     DWORD   dwInIfProtocol;
                    781:     DWORD   dwRouteProtocol;
                    782:     DWORD   dwRouteNetwork;
                    783:     DWORD   dwRouteMask;
                    784:     ULONG   ulUpTime;
                    785:     ULONG   ulExpiryTime;
                    786:     ULONG   ulNumOutIf;
                    787:     ULONG   ulInPkts;
                    788:     ULONG   ulInOctets;
                    789:     ULONG   ulPktsDifferentIf;
                    790:     ULONG   ulQueueOverflow;
                    791:     ULONG   ulUninitMfe;
                    792:     ULONG   ulNegativeMfe;
                    793:     ULONG   ulInDiscards;
                    794:     ULONG   ulInHdrErrors;
                    795:     ULONG   ulTotalOutPackets;
                    796: 
                    797:     MIB_IPMCAST_OIF_STATS   rgmiosOutStats[ANY_SIZE];
                    798: }MIB_IPMCAST_MFE_STATS_EX, *PMIB_IPMCAST_MFE_STATS_EX;
                    799: 
                    800: typedef struct _MIB_MFE_STATS_TABLE_EX
                    801: {
                    802:     DWORD       dwNumEntries;
                    803:     MIB_IPMCAST_MFE_STATS_EX   table[ANY_SIZE];
                    804: }MIB_MFE_STATS_TABLE_EX, *PMIB_MFE_STATS_TABLE_EX;
                    805: 
                    806: #define SIZEOF_BASIC_MIB_MFE_STATS_EX    \
                    807:     (ULONG)(FIELD_OFFSET(MIB_IPMCAST_MFE_STATS_EX, rgmiosOutStats[0]))
                    808: 
                    809: #define SIZEOF_MIB_MFE_STATS_EX(X)       \
                    810:     (SIZEOF_BASIC_MIB_MFE_STATS_EX + ((X) * sizeof(MIB_IPMCAST_OIF_STATS)))
                    811: 
                    812: 
                    813: typedef struct _MIB_IPMCAST_GLOBAL {
                    814:     DWORD   dwEnable;
                    815: }MIB_IPMCAST_GLOBAL, *PMIB_IPMCAST_GLOBAL;
                    816: 
                    817: typedef struct _MIB_IPMCAST_IF_ENTRY
                    818: {
                    819:     DWORD   dwIfIndex;
                    820:     DWORD   dwTtl;
                    821:     DWORD   dwProtocol;
                    822:     DWORD   dwRateLimit;
                    823:     ULONG   ulInMcastOctets;
                    824:     ULONG   ulOutMcastOctets;
                    825: }MIB_IPMCAST_IF_ENTRY, *PMIB_IPMCAST_IF_ENTRY;
                    826: 
                    827: typedef struct _MIB_IPMCAST_IF_TABLE
                    828: {
                    829:     DWORD       dwNumEntries;
                    830:     MIB_IPMCAST_IF_ENTRY   table[ANY_SIZE];
                    831: }MIB_IPMCAST_IF_TABLE, *PMIB_IPMCAST_IF_TABLE;
                    832: 
                    833: #define SIZEOF_MCAST_IF_TABLE(X) (FIELD_OFFSET(MIB_IPMCAST_IF_TABLE,table[0]) + ((X) * sizeof(MIB_IPMCAST_IF_ENTRY)) + ALIGN_SIZE)
                    834: 
                    835: typedef struct _MIB_IPMCAST_BOUNDARY
                    836: {
                    837:     DWORD   dwIfIndex;
                    838:     DWORD   dwGroupAddress;
                    839:     DWORD   dwGroupMask;
                    840:     DWORD   dwStatus;
                    841: }MIB_IPMCAST_BOUNDARY, *PMIB_IPMCAST_BOUNDARY;
                    842: 
                    843: typedef struct _MIB_IPMCAST_BOUNDARY_TABLE
                    844: {
                    845:     DWORD       dwNumEntries;
                    846:     MIB_IPMCAST_BOUNDARY   table[ANY_SIZE];
                    847: }MIB_IPMCAST_BOUNDARY_TABLE, *PMIB_IPMCAST_BOUNDARY_TABLE;
                    848: 
                    849: #define SIZEOF_BOUNDARY_TABLE(X) (FIELD_OFFSET(MIB_IPMCAST_BOUNDARY_TABLE,table[0]) + ((X) * sizeof(MIB_IPMCAST_BOUNDARY)) + ALIGN_SIZE)
                    850: 
                    851: typedef struct {
                    852:     DWORD    dwGroupAddress;
                    853:     DWORD    dwGroupMask;
                    854: } MIB_BOUNDARYROW, *PMIB_BOUNDARYROW;
                    855: 
                    856: // Structure matching what goes in the registry in a block of type
                    857: // IP_MCAST_LIMIT_INFO.  This contains the fields of
                    858: // MIB_IPMCAST_IF_ENTRY which are configurable.
                    859: 
                    860: typedef struct {
                    861:     DWORD    dwTtl;
                    862:     DWORD    dwRateLimit;
                    863: } MIB_MCAST_LIMIT_ROW, *PMIB_MCAST_LIMIT_ROW;
                    864: 
                    865: #define MAX_SCOPE_NAME_LEN 255
                    866: 
                    867: //
                    868: // Scope names are unicode.  SNMP and MZAP use UTF-8 encoding.
                    869: //
                    870: 
                    871: #define SN_UNICODE
                    872: typedef WCHAR   SN_CHAR;
                    873: typedef SN_CHAR SCOPE_NAME_BUFFER[MAX_SCOPE_NAME_LEN+1], *SCOPE_NAME;
                    874: 
                    875: typedef struct _MIB_IPMCAST_SCOPE
                    876: {
                    877:     DWORD             dwGroupAddress;
                    878:     DWORD             dwGroupMask;
                    879:     SCOPE_NAME_BUFFER snNameBuffer;
                    880:     DWORD             dwStatus;
                    881: }MIB_IPMCAST_SCOPE, *PMIB_IPMCAST_SCOPE;
                    882: 
                    883: typedef struct _MIB_IPDESTROW
                    884: {
                    885: #ifdef __cplusplus
                    886:     MIB_IPFORWARDROW  ForwardRow;
                    887: #else
                    888:     MIB_IPFORWARDROW;
                    889: #endif
                    890: 
                    891:     DWORD             dwForwardPreference;
                    892:     DWORD             dwForwardViewSet;
                    893: }MIB_IPDESTROW, *PMIB_IPDESTROW;
                    894: 
                    895: typedef struct _MIB_IPDESTTABLE
                    896: {
                    897:     DWORD             dwNumEntries;
                    898:     MIB_IPDESTROW     table[ANY_SIZE];
                    899: }MIB_IPDESTTABLE, *PMIB_IPDESTTABLE;
                    900: 
                    901: typedef struct _MIB_BEST_IF
                    902: {
                    903:     DWORD       dwDestAddr;
                    904:     DWORD       dwIfIndex;
                    905: }MIB_BEST_IF, *PMIB_BEST_IF;
                    906: 
                    907: typedef struct _MIB_PROXYARP
                    908: {
                    909:     DWORD       dwAddress;
                    910:     DWORD       dwMask;
                    911:     DWORD       dwIfIndex;
                    912: }MIB_PROXYARP, *PMIB_PROXYARP;
                    913: 
                    914: typedef struct _MIB_IFSTATUS
                    915: {
                    916:     DWORD       dwIfIndex;
                    917:     DWORD       dwAdminStatus;
                    918:     DWORD       dwOperationalStatus;
                    919:     BOOL        bMHbeatActive;
                    920:     BOOL        bMHbeatAlive;
                    921: }MIB_IFSTATUS, *PMIB_IFSTATUS;
                    922: 
                    923: typedef struct _MIB_ROUTESTATE
                    924: {
                    925:     BOOL        bRoutesSetToStack;
                    926: 
                    927: }MIB_ROUTESTATE, *PMIB_ROUTESTATE;
                    928: 
                    929: //////////////////////////////////////////////////////////////////////////////
                    930: //                                                                          //
                    931: // All the info passed to (SET/CREATE) and from (GET/GETNEXT/GETFIRST)      //
                    932: // IP Router Manager is encapsulated in the following "discriminated"       //
                    933: // union.  To pass, say MIB_IFROW, use the following code                   //
                    934: //                                                                          //
                    935: //  PMIB_OPAQUE_INFO    pInfo;                                              //
                    936: //  PMIB_IFROW          pIfRow;                                             //
                    937: //  DWORD rgdwBuff[(MAX_MIB_OFFSET + sizeof(MIB_IFROW))/sizeof(DWORD) + 1]; //
                    938: //                                                                          //
                    939: //  pInfo   = (PMIB_OPAQUE_INFO)rgdwBuffer;                                 //
                    940: //  pIfRow  = (MIB_IFROW *)(pInfo->rgbyData);                               //
                    941: //                                                                          //
                    942: //  This can also be accomplished by using the following macro              //
                    943: //                                                                          //
                    944: //  DEFINE_MIB_BUFFER(pInfo,MIB_IFROW, pIfRow);                             //
                    945: //                                                                          //
                    946: //////////////////////////////////////////////////////////////////////////////
                    947: 
                    948: 
                    949: typedef struct _MIB_OPAQUE_INFO
                    950: {
                    951:     DWORD  dwId;
                    952: 
                    953:     union
                    954:     {
                    955:         ULONGLONG   ullAlign;
                    956:         BYTE        rgbyData[1];
                    957:     };
                    958: 
                    959: }MIB_OPAQUE_INFO, *PMIB_OPAQUE_INFO;
                    960: 
                    961: #define MAX_MIB_OFFSET      8
                    962: 
                    963: #define MIB_INFO_SIZE(S)                \
                    964:     (MAX_MIB_OFFSET + sizeof(S))
                    965: 
                    966: #define MIB_INFO_SIZE_IN_DWORDS(S)      \
                    967:     ((MIB_INFO_SIZE(S))/sizeof(DWORD) + 1)
                    968: 
                    969: #define DEFINE_MIB_BUFFER(X,Y,Z)                                        \
                    970:     DWORD        __rgdwBuff[MIB_INFO_SIZE_IN_DWORDS(Y)]; \
                    971:     PMIB_OPAQUE_INFO    X = (PMIB_OPAQUE_INFO)__rgdwBuff;               \
                    972:     Y *                 Z = (Y *)(X->rgbyData)
                    973: 
                    974: 
                    975: #define CAST_MIB_INFO(X,Y,Z)    Z = (Y)(X->rgbyData)
                    976: 
                    977: #if _MSC_VER >= 1200
                    978: #pragma warning(pop)
                    979: #else
                    980: #pragma warning(default:4200)
                    981: #pragma warning(default:4201)
                    982: #pragma warning(default:4214)
                    983: #endif
                    984: 
                    985: #endif //__ROUTING_IPRTRMIB_H__

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.