mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
349 lines
7.1 KiB
349 lines
7.1 KiB
|
|
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
testmac.h
|
|
|
|
Abstract:
|
|
|
|
Definitions for test MAC.
|
|
Motsly taken from the Elnkii code spec.
|
|
|
|
Author:
|
|
|
|
Adam Barr (adamba) 16-Jul-1990
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#define AllocPhys(s) ExAllocatePool(NonPagedPool, s)
|
|
#define FreePhys(s) ExFreePool(s)
|
|
|
|
#define ADDRESS_LEN 6
|
|
|
|
typedef ULONG MASK;
|
|
|
|
UCHAR BroadcastAddress[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
|
|
|
|
|
// only have one of these structures
|
|
|
|
typedef struct _MAC_BLOCK {
|
|
// NDIS information
|
|
NDIS_HANDLE NdisMacHandle; // returned from NdisRegisterMac
|
|
NDIS_MAC_CHARACTERISTICS MacCharacteristics;
|
|
UCHAR MacName[8];
|
|
// adapters registered for us
|
|
UINT NumAdapters;
|
|
struct _ADAPTER_BLOCK * AdapterQueue;
|
|
// should we be verbose
|
|
BOOLEAN Debug;
|
|
// NT specific
|
|
PDRIVER_OBJECT DriverObject;
|
|
KPOWER_STATUS PowerStatus;
|
|
BOOLEAN PowerBoolean;
|
|
NDIS_SPIN_LOCK SpinLock; // guards NumAdapter and AdapterQueue
|
|
} MAC_BLOCK, * PMAC_BLOCK;
|
|
|
|
|
|
// the multicast address list consists of these
|
|
typedef struct _MULTICAST_ENTRY {
|
|
UCHAR Address[ADDRESS_LEN];
|
|
MASK ProtocolMask; // determines which opens it applies to
|
|
} MULTICAST_ENTRY, * PMULTICAST_ENTRY;
|
|
|
|
// one of these per adapter registered
|
|
|
|
typedef struct _ADAPTER_BLOCK {
|
|
// NDIS information
|
|
NDIS_HANDLE NdisAdapterHandle; // returned from NdisRegisterAdapter
|
|
PSTRING AdapterName;
|
|
// used to mark us
|
|
UINT AdapterNumber;
|
|
// links with our MAC
|
|
PMAC_BLOCK MacBlock;
|
|
struct _ADAPTER_BLOCK * NextAdapter; // used by MacBlock->OpenQueue
|
|
// opens for this adapter
|
|
UINT MaxOpens; // maximum number
|
|
struct _OPEN_BLOCK * OpenBlocks; // storage for MaxOpens OPEN_BLOCKs
|
|
UINT NumOpens;
|
|
struct _OPEN_BLOCK * OpenQueue;
|
|
struct _OPEN_BLOCK * FreeOpenQueue;
|
|
// should we be verbose
|
|
BOOLEAN Debug;
|
|
// PROTOCOL.INI information
|
|
UINT MulticastListMax;
|
|
// these are for the current packet
|
|
UCHAR PacketHeader[4];
|
|
UCHAR Lookahead[256];
|
|
UINT PacketLen;
|
|
// receive information
|
|
UINT MulticastListSize; // current size
|
|
PMULTICAST_ENTRY MulticastList;
|
|
NDIS_SPIN_LOCK MulticastSpinLock; // guards all data in this section
|
|
BOOLEAN MulticastDontModify; // an extended spinlock
|
|
MASK MulticastFilter; // these filters work as explained
|
|
MASK DirectedFilter; // in the design note
|
|
MASK BroadcastFilter;
|
|
MASK PromiscuousFilter;
|
|
MASK AllMulticastFilter;
|
|
// loopback information
|
|
PNDIS_PACKET LoopbackQueue;
|
|
PNDIS_PACKET LoopbackQTail;
|
|
NDIS_SPIN_LOCK LoopbackSpinLock;
|
|
PNDIS_PACKET LoopbackPacket;
|
|
// NT specific
|
|
PKINTERRUPT Interrupt;
|
|
KDPC IndicateDpc;
|
|
BOOLEAN DpcQueued;
|
|
} ADAPTER_BLOCK, * PADAPTER_BLOCK;
|
|
|
|
// general macros
|
|
#define MSB(value) ((UCHAR)((value) << 8))
|
|
#define LSB(value) ((UCHAR)((value) && 0xff))
|
|
|
|
// one of these per open on the adapter
|
|
|
|
typedef struct _OPEN_BLOCK {
|
|
// NDIS information
|
|
NDIS_HANDLE NdisBindingContext; // passed to MacOpenAdapter
|
|
PSTRING AddressingInformation; // not used currently
|
|
// links to our adapter
|
|
PADAPTER_BLOCK AdapterBlock;
|
|
struct _OPEN_BLOCK * NextOpen;
|
|
// links to our MAC
|
|
PMAC_BLOCK MacBlock; // faster than using AdapterBlock->MacBlock
|
|
// should we be verbose
|
|
BOOLEAN Debug;
|
|
// used for multicast addresses
|
|
MASK MulticastBit;
|
|
} OPEN_BLOCK, * POPEN_BLOCK;
|
|
|
|
|
|
|
|
// the reserved section of a packet
|
|
|
|
typedef struct _MAC_RESERVED { // can't be more than 16 bytes
|
|
PNDIS_PACKET NextPacket; // used to in the transmit queue (4 bytes)
|
|
NDIS_HANDLE RequestHandle; // for async send completion (4 bytes)
|
|
POPEN_BLOCK OpenBlock; // so we know who to complete to (4 bytes)
|
|
USHORT Status; // completion status (2 bytes)
|
|
BOOLEAN Loopback; // is this a loopback packet (1 byte)
|
|
BOOLEAN ReadyToComplete; // is one out of xmit or loopback done (1 byte)
|
|
} MAC_RESERVED, * PMAC_RESERVED;
|
|
|
|
// macro to retrieve the MAC_RESERVED structure from a packet
|
|
#define RESERVED(Packet) ((PMAC_RESERVED)((Packet)->MacReserved))
|
|
|
|
extern MAC_BLOCK GlobalMacBlock;
|
|
|
|
|
|
//
|
|
// function prototypes
|
|
//
|
|
|
|
|
|
NTSTATUS
|
|
TestMacInitialize(
|
|
IN PDRIVER_OBJECT DriverObject
|
|
);
|
|
|
|
|
|
static
|
|
NTSTATUS
|
|
TestMacDispatch(
|
|
IN PDEVICE_OBJECT DeviceObject,
|
|
IN PIRP Irp
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacRegisterAdapter(
|
|
IN PSTRING AdapterName,
|
|
IN UINT AdapterNumber
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacOpenAdapter(
|
|
OUT NDIS_HANDLE * MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN NDIS_HANDLE NdisBindingContext,
|
|
IN NDIS_HANDLE MacAdapterContext,
|
|
IN PSTRING AddressingInformation OPTIONAL
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacCloseAdapter(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacSetPacketFilter(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN UINT PacketFilter
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacAddMulticastAddress(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN PSTRING MulticastAddress
|
|
);
|
|
|
|
|
|
static
|
|
VOID
|
|
TestMacGetMulticastAccess(
|
|
IN PADAPTER_BLOCK AdaptP
|
|
);
|
|
|
|
|
|
static
|
|
PMULTICAST_ENTRY
|
|
TestMacFindMulticastAddress(
|
|
IN PMULTICAST_ENTRY List,
|
|
IN UINT Size,
|
|
IN PUCHAR MulticastAddress
|
|
);
|
|
|
|
|
|
static
|
|
VOID
|
|
TestMacKillMulticastAddresses(
|
|
IN PADAPTER_BLOCK AdaptP,
|
|
IN MASK MulticastBit
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacDeleteMulticastAddress(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN PSTRING MulticastAddress
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacSend(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN PNDIS_PACKET Packet
|
|
);
|
|
|
|
|
|
static
|
|
VOID
|
|
TestMacSetLoopbackFlag(
|
|
IN OUT PNDIS_PACKET Packet
|
|
);
|
|
|
|
|
|
static
|
|
VOID
|
|
TestMacLoopbackPacket(
|
|
IN PADAPTER_BLOCK AdaptP,
|
|
IN OUT PNDIS_PACKET Packet
|
|
);
|
|
|
|
|
|
static
|
|
VOID
|
|
TestMacIndicateLoopbackPacket(
|
|
IN PADAPTER_BLOCK AdaptP,
|
|
IN PNDIS_PACKET Packet
|
|
);
|
|
|
|
|
|
static
|
|
UINT
|
|
TestMacPacketSize(
|
|
IN PNDIS_PACKET Packet
|
|
);
|
|
|
|
|
|
static
|
|
UINT
|
|
TestMacCopyOver(
|
|
OUT PUCHAR Buf,
|
|
IN PNDIS_PACKET Packet,
|
|
IN UINT Offset,
|
|
IN UINT Length
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacTransferData(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN NDIS_HANDLE MacReceiveContext,
|
|
IN UINT ByteOffset,
|
|
IN UINT BytesToTransfer,
|
|
OUT PNDIS_PACKET Packet,
|
|
OUT PUINT BytesTransferred
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacQueryInformation(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN NDIS_INFORMATION_CLASS InformationClass,
|
|
OUT PVOID Buffer,
|
|
IN UINT BufferLength
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacSetInformation(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle,
|
|
IN NDIS_INFORMATION_CLASS InformationClass,
|
|
IN PVOID Buffer,
|
|
IN UINT BufferLength
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacReset(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle
|
|
);
|
|
|
|
|
|
static
|
|
NDIS_STATUS
|
|
TestMacTest(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN NDIS_HANDLE RequestHandle
|
|
);
|
|
|
|
|
|
static
|
|
VOID
|
|
TestMacIndicateDpc(
|
|
IN PKDPC Dpc,
|
|
IN PVOID DeferredContext,
|
|
IN PVOID SystemArgument1,
|
|
IN PVOID SystemArgument2
|
|
);
|