/* Copyright (C) Microsoft Corporation, 1998 - 1999 Module Name: nettst.h Abstract: This will be the header file for nettest.dll It is intended to be used by both the user of the dll and the source code for the dll. Author: Aug-13-1998 ( t-rajkup ) */ // // Before including this file, the source files for dll will redefine NETTESTAPI // to _declspec(dllexport) // - Rajkumar // #ifndef NETTESTAPI #define NETTESTAPI _declspec(dllimport) #endif /*=============================< Defines >=======================================*/ // defines used in ipconfig structures #define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb. #define MAX_ADAPTER_NAME_LENGTH 256 // arb. #define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb. #define MAX_HOSTNAME_LEN 128 // arb. #define MAX_DOMAIN_NAME_LEN 128 // arb. #define MAX_SCOPE_ID_LEN 256 // arb. // defines used in dhcp response info #define MAX_SUBNET_MASK 32 // arb. #define MAX_IP_ADDR 32 // arb. #define MAX_EXPIRY_TIME_LEN 128 // arb. #define DHCP_BOOT_REPLY 2 // arb. // defines used in wins test // status values returned by wins name query test #define WINS_QUERY_SUCCEEDED 0x00000001 #define WINS_QUERY_FAILED 0x00000002 // defines used in netstat test #define MAX_PHYSADDR_SIZE 8 // defines used in dhcp test #define EXPIRY_TIME_LEN 128 //arb. /*=============================< Data Structures >================================*/ // NOTE: Need to include iptypes.h for definition of IP_ADDR_STRING. // This structure contains the fixed information returned by ipconfig test typedef struct _IPCONFIG_FIXED_INFO { char HostName[MAX_HOSTNAME_LEN + 4] ; char DomainName[MAX_DOMAIN_NAME_LEN + 4]; PIP_ADDR_STRING CurrentDnsServer; IP_ADDR_STRING DnsServerList; UINT NodeType; // see node type related definitions in iptypes.h char ScopeId[MAX_SCOPE_ID_LEN + 4]; UINT EnableRouting; UINT EnableProxy; UINT EnableDns; } IPCONFIG_FIXED_INFO, *PIPCONFIG_FIXED_INFO; // This structure contains per adapter information returned by ipconfig test typedef struct _IPCONFIG_ADAPTER_INFO { struct _IPCONFIG_ADAPTER_INFO *Next; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; // adapter type. See iptypes for definitions on type of adapters UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL PingDhcp; // whether pinging of dhcp server succeeded BOOL HaveWins; // // NOTE: According to KarolyS, it is possible to list upto 12 wins servers // and this is supposed to be included in nettest code. - Rajkumar // IP_ADDR_STRING PrimaryWinsServer; BOOL PingPrimary; // whether pinging of primary WINS succeeded IP_ADDR_STRING SecondaryWinsServer; BOOL PingSecondary; // whether pinging of secondary WINS succeeded time_t LeaseObtained; time_t LeaseExpires; char DhcpClassID[MAX_DOMAIN_NAME_LEN]; UINT AutoconfigEnabled; // is autoconfiguration possible ? UINT AutoconfigActive; // is the adapter currently autoconfigured ? UINT NodeType; char DomainName[MAX_DOMAIN_NAME_LEN + 1]; IP_ADDR_STRING DnsServerList; } IPCONFIG_ADAPTER_INFO, *PIPCONFIG_ADAPTER_INFO; // // Structure used in dhcp response // typedef struct _DHCP_RESPONSE_INFO { USHORT MessageType; // BOOT_REPLY always struct in_addr SubnetMask; struct in_addr ServerIp; struct in_addr DomainName; char ExpiryTime[EXPIRY_TIME_LEN]; } DHCP_RESPONSE_INFO, *PDHCP_RESPONSE_INFO; // // structures returned by netstat test // typedef struct _INTERFACESTATS{ ulong if_index; ulong if_type; ulong if_mtu; ulong if_speed; ulong if_physaddrlen; uchar if_physaddr[MAX_PHYSADDR_SIZE]; ulong if_adminstatus; ulong if_operstatus; ulong if_lastchange; ulong if_inoctets; ulong if_inucastpkts; ulong if_innucastpkts; ulong if_indiscards; ulong if_inerrors; ulong if_inunknownprotos; ulong if_outoctets; ulong if_outucastpkts; ulong if_outnucastpkts; ulong if_outdiscards; ulong if_outerrors; ulong if_outqlen; ulong if_descrlen; uchar if_descr[1]; } INTERFACESTATS, *PINTERFACESTATS; typedef struct _TCPCONNECTIONSTATS { ulong tct_state; ulong tct_localaddr; ulong tct_localport; ulong tct_remoteaddr; ulong tct_remoteport; struct _TCPCONNECTIONSTATS *Next; } TCPCONNECTIONSTATS, *PTCPCONNECTIONSTATS; typedef struct _UDPCONNECTIONSTATS { ulong ue_localaddr; ulong ue_localport; struct _UDPCONNECTIONSTATS *Next; } UDPCONNECTIONSTATS, *PUDPCONNECTIONSTATS; typedef struct _IPINFO { 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; } IPINFO, *PIPINFO; typedef struct _TCP_STATS { ulong ts_rtoalgorithm; ulong ts_rtomin; ulong ts_rtomax; ulong ts_maxconn; ulong ts_activeopens; ulong ts_passiveopens; ulong ts_attemptfails; ulong ts_estabresets; ulong ts_currestab; ulong ts_insegs; ulong ts_outsegs; ulong ts_retranssegs; ulong ts_inerrs; ulong ts_outrsts; ulong ts_numconns; } TCP_STATS, *PTCP_STATS; typedef struct _UDP_STATS { ulong us_indatagrams; // datagrams received ulong us_noports; // no ports ulong us_inerrors; // Receive Errors ulong us_outdatagrams; // datagrams sent } UDP_STATS, *PUDP_STATS; typedef struct _ICMPSTATS { ulong icmps_msgs; // messages ulong icmps_errors; // Errors ulong icmps_destunreachs; // destination unreachable ulong icmps_timeexcds; // time exceedeed ulong icmps_parmprobs; // parameter problems ulong icmps_srcquenchs; // source quenchs ulong icmps_redirects; // redirects ulong icmps_echos; // echos ulong icmps_echoreps; // echo replies ulong icmps_timestamps; // timestamps ulong icmps_timestampreps; // timestamps replies ulong icmps_addrmasks; // address masks ulong icmps_addrmaskreps; // address mask replies } ICMPSTATS, *PICMPSTATS; /*================================< Entry Points >===============================*/ // The user of this entry point must allocate memory for these structures NETTESTAPI BOOL IpConfigTest(PIPCONFIG_FIXED_INFO pIpFixedInfo, PULONG pFixedSize, PIPCONFIG_ADAPTER_INFO pIpAdapterInfo, PULONG pAdapterInfo); NETTESTAPI BOOL CheckDhcp(PIPCONFIG_ADAPTER_INFO pIpAdapterInfo,PDHCP_RESPONSE_INFO pDhcpResponse); NETTESTAPI DWORD QueryWINS(PIP_ADDRESS_STRING WinsServerAddr); // // This entry point will allocate the memory needed. It will not expect the user // to allocate memory for these structures. Freeing of this allcoated memory is // user's reponsibility. There can be additional entry points which can be supplied // which can be used to free this memory // NETTESTAPI BOOL NetstatInfo(PINTERFACESTATS pIfcStat, PTCPCONNECTIONSTATS pTcpConnStats, PUDPCONNECTIONSTATS pUdpConnStats, PIPINFO pIpInfo, PTCP_STATS pTcpStats, PUDP_STATS pUdpStats, ICMPSTATS pIcmpStats);