// -------------------------------------
//
// Copyright (c) 1990 Microsoft Corporation
//
// Module Name:
//
// tpprocs.h
//
// Abstract:
//
// Function prototypes for test and stress sections of the Test Protocol.
//
// Author:
//
// Tom Adams (tomad) 16-Jul-1990
//
// Environment:
//
// Kernel mode, FSD
//
// Revision History:
//
// Tom Adams (tomad) 27-Nov-1990
// Divided the procedures and defintions into two seperate include files.
// Added definitions for TpRunTest and support routines.
//
// Tom Adams (tomad) 30-Dec-1990
// Added defintions for TpStress and support routines.
//
// Tim Wynsma (timothyw) 4-27-94
// Added performance tests
//
// Tim Wynsma (timothyw) 6-08-94
// Chgd performance tests to client/server model
//
// ---------------------------------------
//
// driver initialization and open/close routines
//
NTSTATUS
TpCreateDeviceContext(
IN PDRIVER_OBJECT DriverObject,
IN STRING DeviceName,
PDEVICE_CONTEXT *DeviceContext
);
NTSTATUS
TpCreateSymbolicLinkObject(
VOID
);
NTSTATUS
TpInitializeEventQueue(
IN PDEVICE_CONTEXT DeviceContext
);
NTSTATUS
TpRegisterProtocol(
IN PDEVICE_CONTEXT DeviceContext,
IN STRING *NameString
);
NTSTATUS
TpDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
TpOpenDriver(
IN PDEVICE_CONTEXT DeviceObject
);
NTSTATUS
TpCleanUpDriver(
IN PDEVICE_CONTEXT DeviceContext,
IN PIRP Irp
);
VOID
TpCloseDriver(
IN PDEVICE_CONTEXT DeviceObject
);
VOID
TpUnloadDriver(
IN PDRIVER_OBJECT DriverObject
);
BOOLEAN
TpAddReference(
IN POPEN_BLOCK OpenP
);
VOID
TpRemoveReference(
IN POPEN_BLOCK OpenP
);
NTSTATUS
TpAllocateOpenArray(
POPEN_BLOCK OpenP
);
VOID
TpDeallocateOpenArray(
POPEN_BLOCK OpenP
);
VOID
TpCancelIrp(
IN PDEVICE_CONTEXT DeviceContext,
IN PIRP Irp
);
//
//
//
PUCHAR
TpGetStatus(
IN NDIS_STATUS GeneralStatus
);
//
// functions exported to the MAC for phases 0 and 1 of the Test Protocol
//
VOID
TestProtocolOpenComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenErrorStatus
);
VOID
TestProtocolCloseComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
VOID
TestProtocolSendComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status
);
VOID
TestProtocolTransferDataComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred
);
VOID
TestProtocolResetComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
VOID
TestProtocolRequestComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_REQUEST NdisRequest,
IN NDIS_STATUS Status
);
NDIS_STATUS
TestProtocolReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookaheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
);
VOID
TestProtocolReceiveComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
VOID
TestProtocolStatus(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize
);
VOID
TestProtocolStatusComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
//
// Stress Function Prototypes
//
NDIS_STATUS
TpStressStart(
IN POPEN_BLOCK OpenP,
IN PSTRESS_ARGUMENTS StressArguments
);
VOID
TpStressCleanUp(
IN POPEN_BLOCK OpenP
);
VOID
TpStressFreeResources(
IN POPEN_BLOCK OpenP
);
NDIS_STATUS
TpStressReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookaheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
);
VOID
TpStressReceiveComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
//
// Test Protocol Ndis Stress Routines
//
NDIS_STATUS
TpStressReset(
IN POPEN_BLOCK OpenP
);
VOID
TpStressResetComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
NDIS_STATUS
TpStressAddMulticastAddress(
IN POPEN_BLOCK OpenP,
IN PUCHAR MulticastAddress,
IN BOOLEAN SetZeroTableSize
);
NDIS_STATUS
TpStressAddLongMulticastAddress(
IN POPEN_BLOCK OpenP,
IN PUCHAR MulticastAddress,
IN BOOLEAN SetZeroTableSize
);
NDIS_STATUS
TpStressSetFunctionalAddress(
IN POPEN_BLOCK OpenP,
IN PUCHAR FunctionalAddress,
IN BOOLEAN SetZeroTableSize
);
NDIS_STATUS
TpStressSetPacketFilter(
IN POPEN_BLOCK OpenP,
IN UINT PacketFilter
);
VOID
TpStressRequestComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_REQUEST NdisRequest,
IN NDIS_STATUS Status
);
NDIS_STATUS
TpStressClientSend(
IN POPEN_BLOCK OpenP,
IN OUT NDIS_HANDLE PacketHandle,
IN OUT PTP_TRANSMIT_POOL TpTransmitPool,
IN PUCHAR DestAddr,
IN UCHAR SrcInstance,
IN UCHAR DestInstance,
IN UCHAR PacketProtocol,
IN ULONG SequenceNumber,
IN ULONG MaxSequenceNumber,
IN UCHAR ClientReference,
IN UCHAR ServerReference,
IN INT PacketSize,
IN INT BufferSize
);
VOID
TpStressServerSend(
IN POPEN_BLOCK OpenP,
IN OUT PTP_TRANSMIT_POOL TpTransmitPool,
IN PUCHAR DestAddr,
IN UCHAR DestInstance,
IN UCHAR SrcInstance,
IN ULONG SequenceNumber,
IN ULONG MaxSequenceNumber,
IN UCHAR ClientReference,
IN UCHAR ServerReference,
IN INT PacketSize,
IN ULONG DataBufferOffset
);
VOID
TpStressSend(
IN POPEN_BLOCK OpenP,
IN PNDIS_PACKET Packet,
IN PINSTANCE_COUNTERS Counters
);
VOID
TpStressSendComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status
);
VOID
TpStressCheckPacketData(
IN POPEN_BLOCK OpenP,
IN NDIS_HANDLE MacReceiveContext,
IN ULONG DataOffset,
IN UINT PacketSize,
IN PINSTANCE_COUNTERS Counters
);
VOID
TpStressTransferDataComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred
);
VOID
TpStressDoNothing(
VOID
);
//
// Function prototypes for packet.c
//
PNDIS_PACKET
TpStressCreatePacket(
IN POPEN_BLOCK OpenP,
IN OUT NDIS_HANDLE PacketHandle,
IN OUT PACKET_MAKEUP PacketMakeUp,
IN UCHAR DestInstance,
IN UCHAR SrcInstance,
IN UCHAR PacketProtocol,
IN UCHAR ResponseType,
IN PUCHAR DestAddr,
IN INT PacketSize,
IN INT BufferSize,
IN ULONG SequenceNumber,
IN ULONG MaxSequenceNumber,
IN UCHAR ClientReference,
IN UCHAR ServerReference,
IN BOOLEAN DataChecking
);
PNDIS_PACKET
TpStressCreateTruncatedPacket(
IN POPEN_BLOCK OpenP,
IN NDIS_HANDLE PacketHandle,
IN UCHAR PacketProtocol,
IN UCHAR ResponseType
);
ULONG
TpGetPacketSignature(
IN PNDIS_PACKET Packet
);
VOID
TpStressFreePacket(
IN PNDIS_PACKET Packet
);
PTP_TRANSMIT_POOL
TpStressCreateTransmitPool(
IN POPEN_BLOCK OpenP,
IN NDIS_HANDLE PacketHandle,
IN PACKET_MAKEUP PacketMakeUp,
IN UCHAR PacketProtocol,
IN UCHAR ResponseType,
IN INT PacketSize,
IN INT NumPackets,
IN BOOLEAN ServerPool
);
VOID
TpStressFreeTransmitPool(
IN OUT PTP_TRANSMIT_POOL TpTransmitPool
);
PNDIS_PACKET
TpStressAllocatePoolPacket(
IN PTP_TRANSMIT_POOL TpTransmitPool,
IN PINSTANCE_COUNTERS Counters
);
VOID
TpStressSetPoolPacketInfo(
IN POPEN_BLOCK OpenP,
IN OUT PNDIS_PACKET Packet,
IN PUCHAR DestAddr,
IN UCHAR ClientInstance,
IN UCHAR ServerInstance,
IN ULONG SequenceNumber,
IN ULONG MaxSequenceNumber,
IN UCHAR ClientReference,
IN UCHAR ServerReference
);
VOID
TpStressSetTruncatedPacketInfo(
IN POPEN_BLOCK OpenP,
IN OUT PNDIS_PACKET Packet,
IN PUCHAR DestAddr,
IN INT PacketSize,
IN UCHAR DestInstance,
IN UCHAR SrcInstance,
IN ULONG SequenceNumber,
IN ULONG MaxSequenceNumber,
IN UCHAR ClientReference,
IN UCHAR ServerReference,
IN ULONG DataBufferOffset
);
VOID
TpStressFreePoolPacket(
IN OUT PNDIS_PACKET Packet
);
PTP_PACKET
TpFuncInitPacketHeader(
IN POPEN_BLOCK OpenP,
IN INT PacketSize
);
BOOLEAN
TpCheckSum(
IN PUCHAR Buffer,
IN ULONG BufLen,
IN PULONG CheckSum
);
ULONG
TpSetCheckSum(
IN PUCHAR Buffer,
IN ULONG BufLen
);
PNDIS_PACKET
TpFuncAllocateSendPacket(
POPEN_BLOCK OpenP
);
VOID
TpFuncFreePacket(
PNDIS_PACKET Packet,
ULONG PacketSize
);
//
// Functions prototypes to replace buffer management routines
//
PNDIS_BUFFER
TpAllocateBuffer(
IN PUCHAR TmpBuf,
IN INT BufSize
);
VOID
TpFreeBuffer(
IN OUT PNDIS_BUFFER Buf
);
VOID
TpStressInitDataBuffer(
IN OUT POPEN_BLOCK OpenP,
IN INT BufferSize
);
//
// Sanjeevk : Renamed function
//
VOID
TpStressFreeDataBuffers(
IN OUT POPEN_BLOCK OpenP
);
//
// Sanjeevk : Added new function
//
VOID
TpStressFreeDataBufferMdls(
IN OUT POPEN_BLOCK OpenP
);
//
// Utility Function Prototypes for utils.c
//
NDIS_STATUS
TpInitStressArguments(
PSTRESS_ARGUMENTS *StressArguments,
PCMD_ARGS CmdArgs
);
NDIS_STATUS
TpInitServerArguments(
PSTRESS_ARGUMENTS *StressArguments
);
VOID
TpPrintClientStatistics(
IN POPEN_BLOCK OpenP
);
VOID
TpStressWriteResults(
IN POPEN_BLOCK OpenP
);
VOID
TpCopyClientStatistics(
IN POPEN_BLOCK OpenP
);
VOID
TpWriteServerStatistics(
IN POPEN_BLOCK OpenP,
IN OUT PNDIS_PACKET Packet,
IN PCLIENT_INFO Client
);
VOID
TpCopyServerStatistics(
IN POPEN_BLOCK OpenP,
IN PVOID Buffer,
IN INT ServerReference
);
VOID
TpPrintServerStatistics(
IN POPEN_BLOCK OpenP,
IN PCLIENT_INFO Client
);
VOID
TpWriteSendReceiveResults(
PINSTANCE_COUNTERS Counters,
PIRP Irp
);
VOID
TpInitializePending(
PPENDING Pend
);
VOID
TpInitializeStressResults(
PSTRESS_RESULTS Results
);
//
// Function prototypes for Test Protocol utility routines
//
VOID
TpSetRandom(
VOID
);
UINT
TpGetRandom(
UINT Low,
UINT High
);
NTSTATUS
TpIssueRequest(
IN PDEVICE_CONTEXT DeviceContext,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
NDIS_STATUS
TpFuncSend(
IN POPEN_BLOCK OpenP
);
VOID
TpFuncSendDpc(
IN PKDPC Dpc,
IN PVOID DeferredContext,
IN PVOID SysArg1,
IN PVOID SysArg2
);
VOID
TpFuncSendEndDpc(
IN PKDPC Dpc,
IN PVOID DeferredContext,
IN PVOID SysArg1,
IN PVOID SysArg2
);
VOID
TpFuncInitializeSendArguments(
POPEN_BLOCK OpenP,
PCMD_ARGS CmdArgs
);
NDIS_STATUS
TpPerfClient(
POPEN_BLOCK OpenP,
PCMD_ARGS CmdArgs
);
NDIS_STATUS
TpPerfServer(
POPEN_BLOCK OpenP
);
NDIS_STATUS
TpPerfAbort(
POPEN_BLOCK OpenP
);
VOID
TpPerfSendComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status
);
NDIS_STATUS
TpPerfReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN PVOID LookaheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
);
NDIS_STATUS
TpFuncGetEvent(
IN POPEN_BLOCK OpenP
);
NDIS_STATUS
TpFuncRequestQueryInfo(
POPEN_BLOCK OpenP,
PCMD_ARGS CmdArgs,
PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
NDIS_STATUS
TpFuncRequestSetInfo(
POPEN_BLOCK OpenP,
PCMD_ARGS CmdArgs,
PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
NDIS_STATUS
TpFuncOpenAdapter(
IN POPEN_BLOCK OpenP,
IN UCHAR OpenInstance,
IN PCMD_ARGS CmdArgs
);
NDIS_STATUS
TpFuncCloseAdapter(
IN POPEN_BLOCK OpenP
);
NDIS_STATUS
TpFuncReset(
IN POPEN_BLOCK OpenP
);
NDIS_STATUS
TpFuncAddMulticastAddress(
IN POPEN_BLOCK OpenP,
IN PUCHAR MulticastAddress,
IN PTP_REQUEST_HANDLE *RequestHandle
);
NDIS_STATUS
TpFuncDeleteMulticastAddress(
IN POPEN_BLOCK OpenP,
IN PUCHAR MulticastAddress,
IN PTP_REQUEST_HANDLE *RequestHandle
);
VOID
TpFuncOpenComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenErrorStatus
);
VOID
TpFuncCloseComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
VOID
TpFuncSendComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status
);
VOID
TpFuncTransferDataComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred
);
VOID
TpFuncResetComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status
);
VOID
TpFuncRequestComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_REQUEST NdisRequest,
IN NDIS_STATUS Status
);
NDIS_STATUS
TpFuncInitializeReceive(
IN POPEN_BLOCK OpenP
);
NDIS_STATUS
TpFuncReceive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookaheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize
);
VOID
TpFuncReceiveComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
VOID
TpFuncReceiveDpc(
IN PKDPC Dpc,
IN PVOID DeferredContext,
IN PVOID SysArg1,
IN PVOID SysArg2
);
VOID
TpFuncReceiveEndDpc(
IN PKDPC Dpc,
IN PVOID DeferredContext,
IN PVOID SysArg1,
IN PVOID SysArg2
);
VOID
TpFuncResendDpc(
IN PKDPC Dpc,
IN PVOID DeferredContext,
IN PVOID SysArg1,
IN PVOID SysArg2
);
VOID
TpFuncTransferDataComplete(
IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred
);
VOID
TpFuncStatus(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS GeneralStatus,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize
);
VOID
TpFuncStatusComplete(
IN NDIS_HANDLE ProtocolBindingContext
);
NDIS_STATUS
TpFuncSendGo(
IN POPEN_BLOCK OpenP,
IN PCMD_ARGS CmdArgs,
IN UCHAR PacketType
);
NDIS_STATUS
TpFuncPause(
IN POPEN_BLOCK OpenP,
IN PCMD_ARGS CmdArgs,
IN UCHAR PacketType
);