/*++ Copyright (c) 1992 Microsoft Corporation Module Name: lbmini.h Abstract: NDIS loopback miniport prototypes Author: Jameel Hyder Environment: Kernel mode, FSD Revision History: --*/ #define NDIS_MAJOR_VERSION 0x3 #define NDIS_MINOR_VERSION 0x0 #define LOOP_MAJOR_VERSION 0x5 #define LOOP_MINOR_VERSION 0x0 #define ETH_CARD_ADDRESS "\02\0LOOP" #define ETH_MAX_MULTICAST_ADDRESS 16 #define TR_CARD_ADDRESS "\100\0LOOP" #define FDDI_CARD_ADDRESS "\02\0LOOP" #define FDDI_MAX_MULTICAST_LONG 16 #define FDDI_MAX_MULTICAST_SHORT 16 #define LTALK_CARD_ADDRESS 0xAB #define ARC_CARD_ADDRESS 'L' // // arbitrary maximums... // #define MAX_LOOKAHEAD 256 #define INDICATE_MAXIMUM 256 #define OID_TYPE_MASK 0xFFFF0000 #define OID_TYPE 0xFF000000 #define OID_TYPE_GENERAL 0x00000000 #define OID_TYPE_GENERAL_OPERATIONAL 0x00010000 #define OID_TYPE_GENERAL_STATISTICS 0x00020000 #define OID_TYPE_802_3 0x01000000 #define OID_TYPE_802_3_OPERATIONAL 0x01010000 #define OID_TYPE_802_3_STATISTICS 0x01020000 #define OID_TYPE_802_5 0x02000000 #define OID_TYPE_802_5_OPERATIONAL 0x02010000 #define OID_TYPE_802_5_STATISTICS 0x02020000 #define OID_TYPE_FDDI 0x03000000 #define OID_TYPE_FDDI_OPERATIONAL 0x03010000 #define OID_TYPE_LTALK 0x05000000 #define OID_TYPE_LTALK_OPERATIONAL 0x05010000 #define OID_TYPE_ARCNET 0x06000000 #define OID_TYPE_ARCNET_OPERATIONAL 0x06010000 #define OID_REQUIRED_MASK 0x0000FF00 #define OID_REQUIRED_MANDATORY 0x00000100 #define OID_REQUIRED_OPTIONAL 0x00000200 #define OID_INDEX_MASK 0x000000FF #define GM_TRANSMIT_GOOD 0x00 #define GM_RECEIVE_GOOD 0x01 #define GM_TRANSMIT_BAD 0x02 #define GM_RECEIVE_BAD 0x03 #define GM_RECEIVE_NO_BUFFER 0x04 #define GM_ARRAY_SIZE 0x05 #define PACKET_FILTER_802_3 0xF07F #define PACKET_FILTER_802_5 0xF07F #define PACKET_FILTER_DIX 0xF07F #define PACKET_FILTER_FDDI 0xF07F #define PACKET_FILTER_LTALK 0x8009 #define PACKET_FILTER_ARCNET 0x8009 #define LT_IS_BROADCAST(Address) (BOOLEAN)(Address == 0xFF) #define ARC_IS_BROADCAST(Address) (BOOLEAN)(!(Address)) typedef struct _MEDIA_INFO { ULONG MaxFrameLen; UINT MacHeaderLen; ULONG PacketFilters; ULONG LinkSpeed; } MEDIA_INFO, *PMEDIA_INFO; typedef struct _ADAPTER { NDIS_MEDIUM Medium; // // NDIS Context for this interface NDIS_HANDLE MiniportHandle; UINT MaxLookAhead; UINT AddressLength; ULONG PacketFilter; // // Constants for the adapter // ULONG MediumLinkSpeed; ULONG MediumMinPacketLen; ULONG MediumMaxPacketLen; UINT MediumMacHeaderLen; ULONG MediumMaxFrameLen; ULONG MediumPacketFilters; // // media specific info // UCHAR PermanentAddress[ETH_LENGTH_OF_ADDRESS]; UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS]; // statistics ULONG GeneralMandatory[GM_ARRAY_SIZE]; UCHAR LoopBuffer[MAX_LOOKAHEAD]; ULONG SendPackets; } ADAPTER, *PADAPTER; // // This macro returns a pointer to the LOOP reserved portion of the packet // #define PRESERVED_FROM_PACKET(Packet) ((PPACKET_RESERVED)((PVOID)((Packet)->MacReserved))) #define PPACKET_FROM_RESERVED(Reserved) ((PNDIS_PACKET)((PVOID)((Reserved)->Packet))) typedef struct _PACKET_RESERVED { PNDIS_PACKET Next; USHORT PacketLength; UCHAR HeaderLength; } PACKET_RESERVED, *PPACKET_RESERVED; // // Miniport proto-types // NDIS_STATUS LBInitialize( OUT PNDIS_STATUS OpenErrorStatus, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE ConfigurationContext ); NDIS_STATUS LBSend( IN NDIS_HANDLE MiniportAdapterContext, IN PNDIS_PACKET Packet, IN UINT Flags ); NDIS_STATUS LBQueryInformation( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesWritten, OUT PULONG BytesNeeded ); NDIS_STATUS LBSetInformation( IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_OID Oid, IN PVOID InformationBuffer, IN ULONG InformationBufferLength, OUT PULONG BytesRead, OUT PULONG BytesNeeded ); VOID LBHalt( IN NDIS_HANDLE MiniportAdapterContext ); NDIS_STATUS LBReset( OUT PBOOLEAN AddressingReset, IN NDIS_HANDLE MiniportAdapterContext ); BOOLEAN LBCheckForHang( IN NDIS_HANDLE MiniportAdapterContext ); NDIS_STATUS LBTransferData( OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred, IN NDIS_HANDLE MiniportAdapterContext, IN NDIS_HANDLE MiniportReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer );