windows-nt/Source/XPSP1/NT/net/diagnostics/netdiag/nettst.h
2020-09-26 16:20:57 +08:00

268 lines
8.8 KiB
C

/*
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);