/********************************************************************/ /** Microsoft LAN Manager **/ /** Copyright (c) Microsoft Corporation. All rights reserved. **/ /********************************************************************/ /* :ts=4 */ //** IPINFO.H - IP SNMP information definitions.. // // This file contains all of the definitions for IP that are // related to SNMP information gathering. #ifndef IPINFO_INCLUDED #define IPINFO_INCLUDED #pragma warning(push) #pragma warning(disable:4201) // nameless struct/union #if _MSC_VER > 1000 #pragma once #endif #ifndef CTE_TYPEDEFS_DEFINED #define CTE_TYPEDEFS_DEFINED typedef unsigned long ulong; typedef unsigned short ushort; typedef unsigned char uchar; typedef unsigned int uint; #endif // CTE_TYPEDEFS_DEFINED typedef struct IPSNMPInfo { ulong ipsi_forwarding; ulong ipsi_defaultttl; ulong ipsi_inreceives; ulong ipsi_inhdrerrors; ulong ipsi_inaddrerrors; ulong ipsi_forwdatagrams; ulong ipsi_inunknownprotos; ulong ipsi_indiscards; ulong ipsi_indelivers; ulong ipsi_outrequests; ulong ipsi_routingdiscards; ulong ipsi_outdiscards; ulong ipsi_outnoroutes; ulong ipsi_reasmtimeout; ulong ipsi_reasmreqds; ulong ipsi_reasmoks; ulong ipsi_reasmfails; ulong ipsi_fragoks; ulong ipsi_fragfails; ulong ipsi_fragcreates; ulong ipsi_numif; ulong ipsi_numaddr; ulong ipsi_numroutes; } IPSNMPInfo; typedef struct ICMPStats { ulong icmps_msgs; ulong icmps_errors; ulong icmps_destunreachs; ulong icmps_timeexcds; ulong icmps_parmprobs; ulong icmps_srcquenchs; ulong icmps_redirects; ulong icmps_echos; ulong icmps_echoreps; ulong icmps_timestamps; ulong icmps_timestampreps; ulong icmps_addrmasks; ulong icmps_addrmaskreps; } ICMPStats; typedef struct ICMPSNMPInfo { ICMPStats icsi_instats; ICMPStats icsi_outstats; } ICMPSNMPInfo; typedef struct ICMPv6Stats { ulong icmps_msgs; ulong icmps_errors; ulong icmps_typecount[256]; } ICMPv6Stats; typedef struct ICMPv6SNMPInfo { ICMPv6Stats icsi_instats; ICMPv6Stats icsi_outstats; } ICMPv6SNMPInfo; #define IP_FORWARDING 1 #define IP_NOT_FORWARDING 2 typedef struct IPAddrEntry { ulong iae_addr; ulong iae_index; ulong iae_mask; ulong iae_bcastaddr; ulong iae_reasmsize; ushort iae_context; ushort iae_pad; } IPAddrEntry; // // NT4 IPRouteEntry structure // typedef struct IPRouteEntry_V1 { ulong ire_dest; ulong ire_index; ulong ire_metric1; ulong ire_metric2; ulong ire_metric3; ulong ire_metric4; ulong ire_nexthop; ulong ire_type; ulong ire_proto; ulong ire_age; ulong ire_mask; ulong ire_metric5; // removed ifdef NT because it was breaking route/inetmib1 // NT is not defined in route and inetmib1 sources file void *ire_context; } IPRouteEntry_V1; // // win2000(all SPs) IPRouteEntry structure // typedef struct IPRouteEntry_V2 { ulong ire_dest; ulong ire_index; ulong ire_metric1; ulong ire_metric2; ulong ire_metric3; ulong ire_metric4; ulong ire_nexthop; ulong ire_type; ulong ire_proto; ulong ire_age; ulong ire_mask; ulong ire_metric5; #ifdef NT void *ire_context; #endif } IPRouteEntry_V2; // // WinXP (RTM/SP1/SP2), Win2k3(RTM/SP1) and Vista (LHS/SP1) // IPRouteEntry structure. // typedef struct IPRouteEntry_V3 { ulong ire_dest; ulong ire_index; ulong ire_metric1; ulong ire_metric2; ulong ire_metric3; ulong ire_metric4; ulong ire_nexthop; ulong ire_type; ulong ire_proto; ulong ire_age; ulong ire_mask; ulong ire_metric5; #ifdef NT ulong ire_context; #endif } IPRouteEntry_V3; #if (NTDDI_VERSION < NTDDI_WIN2K) typedef IPRouteEntry_V1 IPRouteEntry; #elif (NTDDI_VERSION < NTDDI_WINXP) typedef IPRouteEntry_V2 IPRouteEntry; #else typedef IPRouteEntry_V3 IPRouteEntry; #endif //NTDDI_VERSION < NTDDI_WIN2K typedef struct IPRouteBlock { ulong numofroutes; IPRouteEntry route[1]; } IPRouteBlock; // // Route with multiple nexthops and associated defns // // // Win2000(all SPs) IPRouteNextHopEntry structure // typedef struct IPRouteNextHopEntry_V1 { ulong ine_iretype; ulong ine_nexthop; ulong ine_ifindex; #ifdef NT void *ine_context; #endif } IPRouteNextHopEntry_V1; // // WinXP and later IPRouteNextHopEntry structure // typedef struct IPRouteNextHopEntry_V2 { ulong ine_iretype; ulong ine_nexthop; ulong ine_ifindex; #ifdef NT ulong ine_context; #endif } IPRouteNextHopEntry_V2; #if (NTDDI_VERSION < NTDDI_WINXP) typedef IPRouteNextHopEntry_V1 IPRouteNextHopEntry; #else typedef IPRouteNextHopEntry_V2 IPRouteNextHopEntry; #endif //NTDDI_VERSION < NTDDI_WINXP // // Win2000(all SPs) IPMultihopRouteEntry structure // typedef struct IPMultihopRouteEntry_V1 { ulong imre_numnexthops; IPRouteEntry imre_routeinfo; IPRouteNextHopEntry imre_morenexthops[1]; } IPMultihopRouteEntry_V1; // // WinXP and later IPMultihopRouteEntry structure // typedef struct IPMultihopRouteEntry_V2 { ulong imre_numnexthops; ulong imre_flags; IPRouteEntry imre_routeinfo; IPRouteNextHopEntry imre_morenexthops[1]; } IPMultihopRouteEntry_V2; #if (NTDDI_VERSION < NTDDI_WINXP) typedef IPMultihopRouteEntry_V1 IPMultihopRouteEntry; #else typedef IPMultihopRouteEntry_V2 IPMultihopRouteEntry; #endif //NTDDI_VERSION < NTDDI_WINXP #define IMRE_FLAG_DELETE_DEST 0x00000001 // // Input context to pass when querying a route // typedef enum { IPNotifyNotification = 0, IPNotifySynchronization, IPNotifyMaximumVersion } IPNotifyVersion; typedef struct IPNotifyData { ulong Version; // See IPNotifyVersion above. ulong Add; char Info[1]; } IPNotifyData, *PIPNotifyData; typedef struct IPNotifyOutput { ulong ino_addr; ulong ino_mask; ulong ino_info[6]; } IPNotifyOutput, *PIPNotifyOutput; typedef union IPRouteNotifyOutput { IPNotifyOutput irno_info; struct { ulong irno_dest; ulong irno_mask; ulong irno_nexthop; ulong irno_proto; ulong irno_ifindex; ulong irno_metric; ulong irno_flags; }; } IPRouteNotifyOutput, *PIPRouteNotifyOutput; #define IRNO_FLAG_ADD 0x00000001 #define IRNO_FLAG_DELETE 0x00000002 // // Input context to pass when querying a route // typedef struct IPRouteLookupData { ulong Version; //version of this structure ulong DestAdd; ulong SrcAdd; char Info[1]; } IPRouteLookupData, *PIPRouteLookupData; typedef struct AddrXlatInfo { ulong axi_count; ulong axi_index; } AddrXlatInfo; #define IRE_TYPE_OTHER 1 #define IRE_TYPE_INVALID 2 #define IRE_TYPE_DIRECT 3 #define IRE_TYPE_INDIRECT 4 #define IRE_PROTO_OTHER 1 #define IRE_PROTO_LOCAL 2 #define IRE_PROTO_NETMGMT 3 #define IRE_PROTO_ICMP 4 #define IRE_PROTO_EGP 5 #define IRE_PROTO_GGP 6 #define IRE_PROTO_HELLO 7 #define IRE_PROTO_RIP 8 #define IRE_PROTO_IS_IS 9 #define IRE_PROTO_ES_IS 10 #define IRE_PROTO_CISCO 11 #define IRE_PROTO_BBN 12 #define IRE_PROTO_OSPF 13 #define IRE_PROTO_BGP 14 // // IRE_PROTO_PERSIST_LOCAL was defined on W2k (all SPs), // XP RTM, and XP SP1. It's been removed since XP SP2. // #if ((NTDDI_VERSION >= NTDDI_WIN2K) && (NTDDI_VERSION < NTDDI_WINXPSP2)) #define IRE_PROTO_PERSIST_LOCAL 10010 #endif #define IRE_METRIC_UNUSED 0xffffffff #define IP_MIB_STATS_ID 1 #define IP_MIB_RTCHANGE_NOTIFY_ID 2 #define ICMP_MIB_STATS_ID 1 #define AT_MIB_ADDRXLAT_INFO_ID 1 #define AT_MIB_ADDRXLAT_ENTRY_ID 0x101 #define IP_MIB_RTTABLE_ENTRY_ID 0x101 #define IP_MIB_ADDRTABLE_ENTRY_ID 0x102 #define IP_MIB_RTTABLE_ENTRY_ID_EX 0x103 #define IP_INTFC_FLAG_P2P 1 #define IP_INTFC_FLAG_P2MP 2 #define IP_INTFC_FLAG_UNIDIRECTIONAL 4 typedef struct IPInterfaceInfo { ulong iii_flags; ulong iii_mtu; ulong iii_speed; ulong iii_addrlength; uchar iii_addr[1]; } IPInterfaceInfo; #define IP_INTFC_INFO_ID 0x103 #define IP_MIB_SINGLE_RT_ENTRY_ID 0x104 #define IP_GET_BEST_SOURCE 0x105 // // Pick up in6_addr type. // #include // // IP6RouteEntry_V1, defined on WinXP RTM, WinXP SP1, W2k3 RTM, // and Longhorn/Vista. // typedef struct IP6RouteEntry_V1 { ulong ire_Length; struct in6_addr ire_Source; ulong ire_ScopeId; ulong ire_IfIndex; } IP6RouteEntry_V1; // // IP6RouteEntry_V2, defined on WinXP SP2, W2k3 SP1 // (and possibly on subsequent service packs of XP and 2k3) // typedef struct IP6RouteEntry_V2 { ulong ire_Length; ulong ire_Type; ulong ire_IfIndex; ulong ire_SourceScopeId; ulong ire_NextHopScopeId; struct in6_addr ire_Source; struct in6_addr ire_NextHop; } IP6RouteEntry_V2; #if (NTDDI_VERSION < NTDDI_WINXPSP2) //XPSP1 and before typedef IP6RouteEntry_V1 IP6RouteEntry; #elif (NTDDI_VERSION < NTDDI_WS03) //[XPSP2, 2k3RTM) typedef IP6RouteEntry_V2 IP6RouteEntry; #elif (NTDDI_VERSION < NTDDI_WS03SP1) //[2k3RTM] typedef IP6RouteEntry_V1 IP6RouteEntry; #elif (NTDDI_VERSION < NTDDI_LONGHORN) //[2k3SP1, Longhorn) typedef IP6RouteEntry_V2 IP6RouteEntry; #else //[Longhorn, ...] typedef IP6RouteEntry_V1 IP6RouteEntry; #endif //NTDDI_VERSION < NTDDI_WINXPSP2 #define IP6_MIB_STATS_ID IP_MIB_STATS_ID #define IP6_GET_BEST_ROUTE_ID 3 #define ICMP6_MIB_STATS_ID 4 #pragma warning(pop) #endif // IPINFO_INCLUDED