|
|
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__
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.