summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/testprot/inc/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/ndis/testprot/inc/common.h')
-rw-r--r--private/ntos/ndis/testprot/inc/common.h835
1 files changed, 835 insertions, 0 deletions
diff --git a/private/ntos/ndis/testprot/inc/common.h b/private/ntos/ndis/testprot/inc/common.h
new file mode 100644
index 000000000..eccf084b3
--- /dev/null
+++ b/private/ntos/ndis/testprot/inc/common.h
@@ -0,0 +1,835 @@
+// -------------------------------------
+//
+// Copyright (c) 1991 Microsoft Corporation
+//
+// Module Name:
+//
+// common.h
+//
+// Abstract:
+//
+// Common definitions for Test Protocol driver and its control application.
+//
+// Author:
+//
+// Tomad Adams (tomad) 11-Mar-1991
+//
+// Environment:
+//
+// Kernel mode, FSD
+//
+// Revision History:
+//
+// Sanjeev Katariya (sanjeevk)
+// 4-19-1993 Added support for varying address length dependent on the media type
+// Effected the structure CMD_ARGS
+//
+// Tim Wynsma (timothyw)
+// 4-27-1994 Added support for performance testing
+// 5-18-1994 1st round, global variable access
+// 6-08-1994 Client-server model for performance tests
+//
+// -----------------------------------
+
+
+#include "defaults.h"
+
+//
+// Define the type of member that the protocol will be running as.
+//
+// As a CLIENT the protocol is responsible for initiating the test,
+// controlling the flow of the test, and keeping results. A SERVER
+// merely loops packets back to the CLIENT in the manner specified
+// by the test arguments. A protocol may act as BOTH a CLIENT and a
+// Server.
+//
+
+typedef enum _MEMBER_TYPE {
+ TP_CLIENT,
+ TP_SERVER,
+ BOTH
+} MEMBER_TYPE;
+
+//
+// Define the size of packets to be used in a test.
+//
+// Fixedsize means the all packets in the test will be of a fixedsize
+// X, Randomsize means the all packets in the test will randomly range
+// between a minimum packetsize and X, Cyclical means that packets of
+// every size will be sent start at a minimum size and walking through
+// all sizes until the maximum packetsize for the given media type
+// has been reached.
+//
+
+typedef enum _PACKET_TYPE {
+ FIXEDSIZE,
+ RANDOMSIZE,
+ CYCLICAL
+} PACKET_TYPE;
+
+
+//
+// Define the different sizes of buffers a packet made be constructed with.
+//
+// Rand means the size of each buffer will be randomly selected from a
+// range of zero to a , Small means the size of each buffer will be randomly
+// selected from a range of zero to , Zeros and Ones mean that the size
+// of each buffer will be selected the same way as Rand, however the will
+// be a large number of zero or one byte buffers intersperced in each
+// packet. Known means the each buffer in the packet is the same size.
+//
+
+typedef enum _PACKET_MAKEUP {
+ RAND,
+ SMALL,
+ ZEROS,
+ ONES,
+ KNOWN
+} PACKET_MAKEUP;
+
+//
+// Define the method the Server will use to respond to each packet the
+// CLIENT sends.
+//
+// No Response means the Server will never respond to the packets from the
+// CLIENT, Full Response means the server will respond to every packet the
+// CLIENT sends with a packet of the same size and data, Ack Every means the
+// Server will send an acknowlegement packet after every from the CLIENT, Ack
+// Every 10 means the Server will send an acknowlegement packet after every
+// 10th packet from the CLIENT, Ack 10 Times means the Server will send 10
+// acknowlegement packets for every packet the CLIENT sends.
+//
+
+typedef enum _RESPONSE_TYPE {
+ FULL_RESPONSE,
+ ACK_EVERY,
+ ACK_10_TIMES,
+ NO_RESPONSE
+} RESPONSE_TYPE;
+
+//
+// Define the delay between two consecutive packet sends to a given Server.
+//
+// The delay will either be a fixed number of iterations, or a random
+// number of iterations. NOTE: That this will be changing to a fixed
+// or random length of time in the future.
+//
+
+typedef enum _INTERPACKET_DELAY {
+ FIXEDDELAY,
+ RANDOMDELAY
+} INTERPACKET_DELAY;
+
+
+//
+// Registry typedefs.
+//
+
+//
+// Define the operation being asked to execute on the registry
+//
+
+typedef enum _OPERATION {
+ ADD_KEY,
+ DELETE_KEY,
+ QUERY_KEY,
+ ADD_VALUE,
+ CHANGE_VALUE,
+ DELETE_VALUE,
+ QUERY_VALUE
+} OPERATION;
+
+//
+// Define the 4 possible registry DataBases
+//
+
+typedef enum _KEYDBASE {
+ CLASSES_ROOT,
+ CURRENT_USER,
+ LOCAL_MACHINE,
+ USERS
+} KEYDBASE;
+
+//
+// Define the various types a value can be
+//
+
+typedef enum _VALUETYPE {
+ BINARY,
+ DWORD_REGULAR,
+ DWORD_LITTLE_ENDIAN,
+ DWORD_BIG_ENDIAN,
+ EXPAND_SZ,
+ LINK,
+ MULTI_SZ,
+ NONE,
+ RESOURCE_LIST,
+ SZ
+} VALUETYPE;
+
+//
+// Tpctl Command Codes
+//
+
+#define CMD_ERR 0x00000000 // an invalid command was entered.
+#define GETSTATS 0x00000001 // get the test statistics.
+#define DISPSTATS 0x00000002 // continuously get test statistics.
+#define VERBOSE 0x00000003 // toggle verbose mode on and off.
+#define SETENV 0x00000004 // set the driver's test environment vars.
+#define READSCRIPT 0x00000005 // read a script file.
+#define BEGINLOGGING 0x00000006 // begin logging command line cmds.
+#define ENDLOGGING 0x00000007 // end logging command line cmds.
+#define WAIT 0x00000008 // wait for X msecs.
+#define GO 0x00000009 // Tell remote protocol to continue.
+#define PAUSE 0x0000000A // Pause the local protocol.
+#define LOAD 0x0000000B // call NtLoad to load a driver
+#define UNLOAD 0x0000000C // call NtUnload to unload a driver
+#define OPEN 0x0000000D // open a MAC adapter.
+#define CLOSE 0x0000000E // close a MAC adapter.
+#define SETPF 0x0000000F // set the packet filter on the MAC.
+#define SETLA 0x00000010 // set the lookahead buffer size.
+#define DELMA 0x00000011 // del a multicast address from the MAC.
+#define ADDMA 0x00000012 // add a multicast address to the MAC.
+#define SETFA 0x00000013 // set a functional address on the MAC.
+#define SETGA 0x00000014 // set a group address on the MAC.
+#define QUERYINFO 0x00000015 // query MAC information.
+#define QUERYSTATS 0x00000016 // query GLOBAL MAC information.
+#define SETINFO 0x00000017 // set MAC information.
+#define RESET 0x00000018 // reset the MAC adapter.
+#define SEND 0x00000019 // send a packet or packets.
+#define STOPSEND 0x0000001A // stop sending packets.
+#define WAITSEND 0x0000001B // wait for send to end, display results.
+#define RECEIVE 0x0000001C // start accepting packets.
+#define STOPREC 0x0000001D // stop accepting packets.
+#define GETEVENTS 0x0000001E // get events off the EVENT_QUEUE.
+#define STRESS 0x0000001F // run a stress test, (CLIENT or BOTH).
+#define STRESSSERVER 0x00000020 // act as a SERVER for a stress test.
+#define ENDSTRESS 0x00000021 // end a stress test.
+#define WAITSTRESS 0x00000022 // wait for stress to end, display results.
+#define CHECKSTRESS 0x00000023 // see if stress has ended, if so display
+#define BREAKPOINT 0x00000024 // call DbgBreakPoint.
+#define QUIT 0x00000025 // quit TPCTL.EXE.
+#define HELP 0x00000026 // print the help screen
+
+//
+// New Tpctl Command Codes
+//
+
+#define SHELL 0x00000027
+#define RECORDINGENABLE 0x00000028
+#define RECORDINGDISABLE 0x00000029
+#define DISABLE 0x0000002A
+#define ENABLE 0x0000002B
+#define REGISTRY 0x0000002C
+
+// performance testing
+
+#define PERFSERVER 0x0000002D
+#define PERFCLIENT 0x0000002E
+#define PERFABORT 0x0000002F // only used in TP_CONTROL_CODE call
+
+// globalvars
+
+#define SETGLOBAL 0x00000030
+
+
+#define CMD_COMPLETED 0xFFFFFFFF // skip the second half of cmd processing.
+
+
+
+//
+// NtDeviceIoControlFile IoControlCode values for this device.
+//
+// Warning: Remember that the low two bits of the code represent the
+// method, and specify how the input and output buffers are
+// passed to the driver via NtDeviceIoControlFile()
+//
+//
+
+#define IOCTL_METHOD 2
+
+#define IOCTL_TP_BASE FILE_DEVICE_TRANSPORT
+
+#define TP_CONTROL_CODE(request,method) \
+ ((IOCTL_TP_BASE)<<16 | (request<<2) | method)
+
+
+#define IOCTL_TP_GETSTATS TP_CONTROL_CODE( GETSTATS, IOCTL_METHOD )
+#define IOCTL_TP_DISPSTATS TP_CONTROL_CODE( DISPSTATS, IOCTL_METHOD )
+#define IOCTL_TP_SETENV TP_CONTROL_CODE( SETENV, IOCTL_METHOD )
+#define IOCTL_TP_GO TP_CONTROL_CODE( GO, IOCTL_METHOD )
+#define IOCTL_TP_PAUSE TP_CONTROL_CODE( PAUSE, IOCTL_METHOD )
+#define IOCTL_TP_OPEN TP_CONTROL_CODE( OPEN, IOCTL_METHOD )
+#define IOCTL_TP_CLOSE TP_CONTROL_CODE( CLOSE, IOCTL_METHOD )
+#define IOCTL_TP_SETPF TP_CONTROL_CODE( SETPF, IOCTL_METHOD )
+#define IOCTL_TP_SETLA TP_CONTROL_CODE( SETLA, IOCTL_METHOD )
+#define IOCTL_TP_ADDMA TP_CONTROL_CODE( ADDMA, IOCTL_METHOD )
+#define IOCTL_TP_DELMA TP_CONTROL_CODE( DELMA, IOCTL_METHOD )
+#define IOCTL_TP_SETFA TP_CONTROL_CODE( SETFA, IOCTL_METHOD )
+#define IOCTL_TP_SETGA TP_CONTROL_CODE( SETGA, IOCTL_METHOD )
+#define IOCTL_TP_QUERYINFO TP_CONTROL_CODE( QUERYINFO, IOCTL_METHOD )
+#define IOCTL_TP_QUERYSTATS TP_CONTROL_CODE( QUERYSTATS, IOCTL_METHOD )
+#define IOCTL_TP_SETINFO TP_CONTROL_CODE( SETINFO, IOCTL_METHOD )
+#define IOCTL_TP_RESET TP_CONTROL_CODE( RESET, IOCTL_METHOD )
+#define IOCTL_TP_SEND TP_CONTROL_CODE( SEND, IOCTL_METHOD )
+#define IOCTL_TP_STOPSEND TP_CONTROL_CODE( STOPSEND, IOCTL_METHOD )
+#define IOCTL_TP_RECEIVE TP_CONTROL_CODE( RECEIVE, IOCTL_METHOD )
+#define IOCTL_TP_STOPREC TP_CONTROL_CODE( STOPREC, IOCTL_METHOD )
+#define IOCTL_TP_GETEVENTS TP_CONTROL_CODE( GETEVENTS, IOCTL_METHOD )
+#define IOCTL_TP_STRESS TP_CONTROL_CODE( STRESS, IOCTL_METHOD )
+#define IOCTL_TP_STRESSSERVER TP_CONTROL_CODE( STRESSSERVER, IOCTL_METHOD )
+#define IOCTL_TP_ENDSTRESS TP_CONTROL_CODE( ENDSTRESS, IOCTL_METHOD )
+#define IOCTL_TP_BREAKPOINT TP_CONTROL_CODE( BREAKPOINT, IOCTL_METHOD )
+#define IOCTL_TP_TRANSFERDATA TP_CONTROL_CODE( TRANSFERDATA, IOCTL_METHOD )
+#define IOCTL_TP_QUIT TP_CONTROL_CODE( QUIT, IOCTL_METHOD )
+
+// performance testing
+
+#define IOCTL_TP_PERF_SERVER TP_CONTROL_CODE( PERFSERVER, IOCTL_METHOD)
+#define IOCTL_TP_PERF_CLIENT TP_CONTROL_CODE( PERFCLIENT, IOCTL_METHOD)
+#define IOCTL_TP_PERF_ABORT TP_CONTROL_CODE( PERFABORT, IOCTL_METHOD)
+
+//
+// The following structure contains the arguments passed
+// to the driver for each of the commands.
+//
+// NOTE: Any additions to arguments in this structure must
+// be mapped in the parse options structure TESTPARAMS for
+// the given command, and in the TpctlInitCommandBuffer
+// routine for the given command.
+//
+// Current types of addresses in use
+//
+// 1. STATION ADDRESS 2. STRESS MULTICAST ADDRESS
+// 3. PAUSE_GO REMOTE ADDRESS 4 MULTICAST ADDRESS
+// 5. GROUP ADDRESS 6. FUNCTIONAL ADDRESS
+// 7. DESTINATION ADDRESS 8. RESEND ADDRESS
+//
+// These can all be classified under two headings
+//
+// CURRENT ADDRESS LENGTHS(SOURCE, DESTINATION) and
+// FUNCTIONAL/GROUP ADDRESS LENGTHS which are dependencies of the first category.
+//
+// Functional address length will always be (CURRENT_ADDRESS_LEN*10)/15
+// e.g. When the address length is 6, FA's are 4
+// WHen the address length is 2, FA's are 1
+//
+#define TPCTL_OPTION_SIZE 14
+
+typedef struct _CMD_ARGS {
+
+ ULONG CmdCode;
+ ULONG OpenInstance;
+
+
+
+ union _ARGS {
+
+ //
+ // SETENV command environment variable arguments.
+ //
+
+ struct _ENV {
+
+ ULONG WindowSize;
+ ULONG RandomBufferNumber;
+ UCHAR StressAddress[ADDRESS_LENGTH];
+ UCHAR ResendAddress[ADDRESS_LENGTH];
+ ULONG StressDelayInterval;
+ ULONG UpForAirDelay;
+ ULONG StandardDelay;
+
+ } ENV;
+
+ //
+ // READSCRIPT script and logging file arguments.
+ //
+
+ struct _FILES {
+
+ UCHAR ScriptFile[MAX_FILENAME_LENGTH];
+ UCHAR LogFile[MAX_FILENAME_LENGTH];
+
+ } FILES;
+
+ //
+ // RECORDING script file
+ //
+
+ struct _RECORD {
+
+ UCHAR ScriptFile[MAX_FILENAME_LENGTH];
+
+ } RECORD;
+
+ //
+ // Registry operations
+ //
+
+ struct _REGISTRY_ENTRY {
+
+ UCHAR SubKey[MAX_KEYNAME_LENGTH] ;
+ UCHAR SubKeyClass[MAX_CLASS_LENGTH] ;
+ UCHAR SubKeyValueName[MAX_VALUENAME_LENGTH] ;
+ UCHAR SubKeyValue[MAX_VALUE_LENGTH] ;
+ OPERATION OperationType;
+ KEYDBASE KeyDatabase ;
+ VALUETYPE ValueType ;
+
+ } REGISTRY_ENTRY;
+
+ //
+ // PAUSE and GO protocol arguments.
+ //
+
+ struct _PAUSE_GO {
+
+ UCHAR RemoteAddress[ADDRESS_LENGTH];
+ ULONG TestSignature;
+ ULONG UniqueSignature;
+
+ } PAUSE_GO;
+
+ //
+ // OPEN command adapter name argument.
+ //
+
+ struct _OPEN_ADAPTER
+ {
+ UCHAR AdapterName[MAX_ADAPTER_NAME_LENGTH];
+ BOOLEAN NoArcNet;
+ } OPEN_ADAPTER;
+
+ UCHAR DriverName[MAX_ADAPTER_NAME_LENGTH];
+
+ //
+ // QUERYINFO command information OID.
+ //
+
+ struct _TPQUERY {
+
+ NDIS_OID OID;
+ //NDIS_REQUEST_TYPE RequestType;
+
+ } TPQUERY;
+
+ //
+ // QUERYSTATS command Device name and OID to query.
+ //
+
+ struct _TPQUERYSTATS {
+
+ UCHAR DeviceName[MAX_ADAPTER_NAME_LENGTH];
+ NDIS_OID OID;
+
+ } TPQUERYSTATS;
+
+ //
+ // SETINFO command information class and info.
+ //
+
+ struct _TPSET {
+
+ NDIS_OID OID;
+
+ union _U {
+
+ ULONG PacketFilter;
+ ULONG LookaheadSize;
+ UCHAR MulticastAddress[MAX_MULTICAST_ADDRESSES][ADDRESS_LENGTH];
+ UCHAR FunctionalAddress[FUNCTIONAL_ADDRESS_LENGTH];
+ UCHAR GroupAddress[FUNCTIONAL_ADDRESS_LENGTH];
+
+ } U;
+
+ ULONG NumberMultAddrs;
+
+ } TPSET;
+
+ //
+ // SEND command packet definitions.
+ //
+
+ struct _TPSEND {
+
+ UCHAR DestAddress[ADDRESS_LENGTH];
+ ULONG PacketSize;
+ ULONG NumberOfPackets;
+ UCHAR ResendAddress[ADDRESS_LENGTH];
+
+ } TPSEND;
+
+ //
+ // PERFSEND command packet definitions
+ //
+
+ struct _TPPERF
+ {
+ UCHAR PerfServerAddr[ADDRESS_LENGTH];
+ UCHAR PerfSendAddr[ADDRESS_LENGTH];
+ ULONG PerfPacketSize;
+ ULONG PerfNumPackets;
+ ULONG PerfDelay;
+ ULONG PerfMode;
+ } TPPERF;
+
+ //
+ // STRESS command test arguments.
+ //
+
+ struct _TPSTRESS {
+
+ MEMBER_TYPE MemberType;
+ PACKET_TYPE PacketType;
+ ULONG PacketSize;
+ PACKET_MAKEUP PacketMakeUp;
+ RESPONSE_TYPE ResponseType;
+ INTERPACKET_DELAY DelayType;
+ ULONG DelayLength;
+ ULONG TotalIterations;
+ ULONG TotalPackets;
+ ULONG WindowEnabled;
+ ULONG DataChecking;
+ ULONG PacketsFromPool;
+ UCHAR AdapterName[MAX_ADAPTER_NAME_LENGTH];
+
+ } TPSTRESS;
+
+ //
+ // HELP Command to print the help message for.
+ //
+
+ UCHAR CmdName[MAX_FILENAME_LENGTH];
+
+ } ARGS;
+
+
+ //
+ // STARTCHANGE
+ //
+ UCHAR CurrentAddressLength;
+ UCHAR CurrentFALength;
+
+ UCHAR TpctlOptions[TPCTL_OPTION_SIZE];
+ //
+ // STOPCHANGE
+ //
+
+} CMD_ARGS, *PCMD_ARGS;
+
+//
+// User App command data struct to hold per command info.
+//
+
+typedef struct _CMD_CODE {
+ ULONG CmdCode;
+ PSZ CmdName;
+ PSZ CmdAbbr;
+} CMD_CODE, * PCMD_CODE;
+
+#define NUM_COMMANDS sizeof( CommandCode ) / sizeof( CommandCode[0] )
+
+//
+// Set Environment Command Variables
+//
+
+typedef struct _ENVIRONMENT_VARIABLES {
+ ULONG WindowSize;
+ ULONG RandomBufferNumber;
+ UCHAR StressAddress[ADDRESS_LENGTH];
+ UCHAR ResendAddress[ADDRESS_LENGTH];
+ ULONG StressDelayInterval;
+ ULONG UpForAirDelay;
+ ULONG StandardDelay;
+ ULONG MulticastListSize;
+} ENVIRONMENT_VARIABLES, * PENVIRONMENT_VARIABLES;
+
+//
+// The pointers to these structures need to be defined as UNALIGNED for MIPS.
+//
+
+//
+// Counters used to measure performance and results of a test run.
+//
+
+typedef struct _GLOBAL_COUNTERS {
+ ULONG Sends;
+ ULONG SendComps;
+ ULONG Receives;
+ ULONG ReceiveComps;
+ ULONG CorruptRecs;
+ ULONG InvalidPacketRecs;
+} GLOBAL_COUNTERS;
+typedef GLOBAL_COUNTERS UNALIGNED *PGLOBAL_COUNTERS;
+
+//
+// Counters for a given Open Instance
+//
+
+typedef struct _INSTANCE_COUNTERS {
+ ULONG Sends;
+ ULONG SendPends;
+ ULONG SendComps;
+ ULONG SendFails;
+
+ ULONG Receives;
+ ULONG ReceiveComps;
+ ULONG CorruptRecs;
+ ULONG XferData;
+
+ ULONG XferDataPends;
+ ULONG XferDataComps;
+ ULONG XferDataFails;
+} INSTANCE_COUNTERS;
+typedef INSTANCE_COUNTERS UNALIGNED *PINSTANCE_COUNTERS;
+
+//
+// The following data structure are use to pass specific test results
+// up to the application from the driver.
+//
+
+typedef struct _SERVER_RESULTS {
+ ULONG Signature;
+ UCHAR Address[ADDRESS_LENGTH];
+ ULONG OpenInstance;
+ BOOLEAN StatsRcvd;
+ INSTANCE_COUNTERS Instance;
+ INSTANCE_COUNTERS S_Instance;
+ GLOBAL_COUNTERS S_Global;
+} SERVER_RESULTS, *PSERVER_RESULTS;
+
+#define MAX_SERVERS 10
+
+typedef struct _STRESS_RESULTS {
+ ULONG Signature;
+ UCHAR Address[ADDRESS_LENGTH];
+ ULONG OpenInstance;
+ ULONG NumServers;
+ ULONG PacketsPerSecond;
+ GLOBAL_COUNTERS Global;
+ SERVER_RESULTS Servers[MAX_SERVERS];
+} STRESS_RESULTS, *PSTRESS_RESULTS;
+
+typedef struct _SEND_RECEIVE_RESULTS {
+ ULONG Signature;
+ BOOLEAN ResultsExist;
+ INSTANCE_COUNTERS Counters;
+} SEND_RECEIVE_RESULTS, *PSEND_RECEIVE_RESULTS;
+
+typedef struct _PERF_RESULTS
+{
+ ULONG Signature;
+ BOOLEAN ResultsExist;
+ ULONG Mode;
+ ULONG PacketSize;
+ ULONG PacketCount;
+ ULONG Milliseconds;
+ ULONG Sends;
+ ULONG SendFails;
+ ULONG Receives;
+ ULONG Restarts;
+ ULONG SelfReceives;
+ ULONG S_Milliseconds;
+ ULONG S_Sends;
+ ULONG S_SendFails;
+ ULONG S_Receives;
+ ULONG S_Restarts;
+ ULONG S_SelfReceives;
+} PERF_RESULTS, *PPERF_RESULTS;
+
+
+typedef enum _TP_EVENT_TYPE {
+ CompleteOpen,
+ CompleteClose,
+ CompleteSend,
+ CompleteTransferData,
+ CompleteReset,
+ CompleteRequest,
+ IndicateReceive,
+ IndicateReceiveComplete,
+ IndicateStatus,
+ IndicateStatusComplete,
+ Unknown
+} TP_EVENT_TYPE;
+
+typedef struct _EVENT_RESULTS {
+ ULONG Signature;
+ TP_EVENT_TYPE TpEventType;
+ BOOLEAN QueueOverFlowed;
+ //TP_EVENT_INFO TpEventInfo;
+} EVENT_RESULTS, * PEVENT_RESULTS;
+
+typedef struct _REQUEST_RESULTS {
+ ULONG Signature;
+ ULONG IoControlCode;
+ BOOLEAN RequestPended;
+ NDIS_STATUS RequestStatus;
+ NDIS_REQUEST_TYPE NdisRequestType;
+ NDIS_OID OID;
+ UINT BytesReadWritten;
+ UINT BytesNeeded;
+ NDIS_STATUS OpenRequestStatus;
+ UINT InformationBufferLength;
+ UCHAR InformationBuffer[1];
+} REQUEST_RESULTS, *PREQUEST_RESULTS;
+
+#define IOCTL_BUFFER_SIZE 0x200
+
+#define OPEN_RESULTS_SIGNATURE 0x12345678
+#define CLOSE_RESULTS_SIGNATURE 0x23456789
+#define RESET_RESULTS_SIGNATURE 0x34567890
+#define REQUEST_RESULTS_SIGNATURE 0x45678901
+
+#define EVENT_RESULTS_SIGNATURE 0x56789012
+#define SENDREC_RESULTS_SIGNATURE 0x67890123
+#define STRESS_RESULTS_SIGNATURE 0x89012345
+#define PERF_RESULTS_SIGNATURE 0x90123456
+
+//
+// Create two sets of debug macros to allow printing of debug messages,
+// and enabling ASSERT that will be checking the values and pointers
+// returned by the various ndis indications, and completions.
+//
+
+#if DBG
+
+#define IF_TPDBG(flags) \
+ if ( TpDebug & ( flags ))
+
+#define TP_ASSERT(equality) { \
+ if (!(equality)) { \
+ TpPrint0("ASSERT: "); \
+ TpPrint0(#equality); \
+ TpBreakPoint(); } }
+//
+//
+// if ( TpAssert == TRUE ) {
+// ASSERT(equality);
+// }
+// }
+
+//
+// DEBUGGING SUPPORT. IF_TPDBG is a macro that is turned on at compile
+// time to enable debugging code in the system. If this is turned on, then
+// you can use the IF_TPDBG(flags) macro in the TP code to selectively
+// enable a piece of debugging code in the transport. This macro tests
+// TpDebug, a global ULONG defined in TPDRVR.C.
+//
+
+#define TP_DEBUG_NDIS_CALLS 0x00000001 // print Ndis Status returns
+#define TP_DEBUG_NDIS_ERROR 0x00000002 // print Ndis Error returns
+#define TP_DEBUG_STATISTICS 0x00000004 // print stress statistics
+#define TP_DEBUG_DATA 0x00000008 // print Data Corruption msgs
+
+#define TP_DEBUG_DISPATCH 0x00000010 // TpDispatch routines
+#define TP_DEBUG_IOCTL_ARGS 0x00000020 // print args from the ioctl
+
+#define TP_DEBUG_NT_STATUS 0x00000100 // print !success NT Status returns
+#define TP_DEBUG_DPC 0x00000200 // print DPC problem info
+#define TP_DEBUG_INITIALIZE 0x00000400 // print init error info
+#define TP_DEBUG_RESOURCES 0x00000800 // print resource allocation errors
+
+#define TP_DEBUG_BREAKPOINT 0x00001000 // enable and disable DbgBreakPoints
+
+#define TP_DEBUG_INFOLEVEL_1 0x00010000 // print information. Level 1
+#define TP_DEBUG_INFOLEVEL_2 0x00020000 // through 4 represent different
+#define TP_DEBUG_INFOLEVEL_3 0x00040000 // types of information where
+#define TP_DEBUG_INFOLEVEL_4 0x00080000 // Level 1 is purely informational
+ // Level 2 is corrective action information
+ // Level 3 is sequential action information
+ // Level 4 Reserved. Currently undefined.
+
+#define TP_DEBUG_ALL 0xFFFFFFFF // turns on all flags
+
+extern ULONG TpDebug; // in TPDRVR.C.
+extern BOOLEAN TpAssert; // in TPDRVR.C.
+
+#define TpPrint0(fmt) DbgPrint(fmt)
+#define TpPrint1(fmt,v1) DbgPrint(fmt,v1)
+#define TpPrint2(fmt,v1,v2) DbgPrint(fmt,v1,v2)
+#define TpPrint3(fmt,v1,v2,v3) DbgPrint(fmt,v1,v2,v3)
+#define TpPrint4(fmt,v1,v2,v3,v4) DbgPrint(fmt,v1,v2,v3,v4)
+#define TpPrint5(fmt,v1,v2,v3,v4,v5) DbgPrint(fmt,v1,v2,v3,v4,v5)
+#define TpPrint6(fmt,v1,v2,v3,v4,v5,v6) DbgPrint(fmt,v1,v2,v3,v4,v5,v6)
+
+#define TpBreakPoint() DbgBreakPoint()
+
+#else // NO DBG
+
+//
+// Disable debugging IFs and printing
+//
+
+#define IF_TPDBG(flags) \
+ if (0)
+
+#define TP_ASSERT(equality) \
+ if (0)
+
+#define TpPrint0(fmt)
+#define TpPrint1(fmt,v1)
+#define TpPrint2(fmt,v1,v2)
+#define TpPrint3(fmt,v1,v2,v3)
+#define TpPrint4(fmt,v1,v2,v3,v4)
+#define TpPrint5(fmt,v1,v2,v3,v4,v5)
+#define TpPrint6(fmt,v1,v2,v3,v4,v5,v6)
+
+#define TpBreakPoint()
+
+#endif // DBG
+
+//
+// define null packet type for command line interface
+//
+
+#define NDIS_PACKET_TYPE_NONE 0x00
+
+
+//
+// Test Protocol Status Returns
+//
+
+//
+// No stress servers found for a stress test.
+//
+
+#define TP_STATUS_NO_SERVERS ((NDIS_STATUS)0x4001FFFFL)
+
+//
+// No events on the event queue.
+//
+
+#define TP_STATUS_NO_EVENTS ((NDIS_STATUS)0x4001FFFEL)
+
+//
+// Go or Pause Timed out with out receiving correct response.
+//
+
+#define TP_STATUS_TIMEDOUT ((NDIS_STATUS)0x4001FFFDL)
+
+//
+// OID Info structure containing the size of the oid info and what
+// the valid uses of the structure are: i.e. querying and setting
+// info for that OID.
+//
+
+typedef struct _OID_INFO {
+ NDIS_OID Oid;
+ ULONG Length;
+ BOOLEAN QueryInfo;
+ BOOLEAN SetInfo;
+ BOOLEAN QueryStats;
+} OID_INFO, * POID_ONFO;
+
+extern OID_INFO OidArray[];
+
+#define NUM_OIDS sizeof( OidArray ) / sizeof( OidArray[0] )
+
+ULONG
+TpLookUpOidInfo(
+ IN NDIS_OID RequestOid
+ );
+
+
+
+