blob: 53900bf2b6d51cf6c051c447a5f1e1951e1320d5 [file] [log] [blame]
/*
* afilter.h
*
* Address filtering for NDIS MACs
*
* This file is part of the w32api package.
*
* Contributors:
* Created by Filip Navara <xnavara@volny.cz>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef _ARC_FILTER_DEFS_
#define _ARC_FILTER_DEFS_
#ifdef __cplusplus
extern "C" {
#endif
#define ARC_RECEIVE_BUFFERS 64
#define ARCNET_ADDRESS_LEN 1
#define ARC_PROTOCOL_HEADER_SIZE (sizeof(ARC_PROTOCOL_HEADER))
#define ARC_MAX_FRAME_SIZE 504
#define ARC_MAX_ADDRESS_IDS 256
#define ARC_MAX_FRAME_HEADER_SIZE 6
#define ARC_MAX_PACKET_SIZE 576
#define ARC_FILTER_MAX_OPENS (sizeof(ULONG) * 8)
#define ARC_IS_BROADCAST(Address) (BOOLEAN)(!(Address))
#define ARC_QUERY_FILTER_CLASSES(Filter) ((Filter)->CombinedPacketFilter)
#define ARC_QUERY_PACKET_FILTER(Filter, NdisFilterHandle) \
(((PARC_BINDING_INFO)(NdisFilterHandle))->PacketFilters)
typedef ULONG MASK, *PMASK;
typedef struct _ARC_BUFFER_LIST
{
PVOID Buffer;
UINT Size;
UINT BytesLeft;
struct _ARC_BUFFER_LIST *Next;
} ARC_BUFFER_LIST, *PARC_BUFFER_LIST;
typedef struct _ARC_PROTOCOL_HEADER
{
UCHAR SourceId[ARCNET_ADDRESS_LEN];
UCHAR DestId[ARCNET_ADDRESS_LEN];
UCHAR ProtId;
} ARC_PROTOCOL_HEADER, *PARC_PROTOCOL_HEADER;
typedef struct _ARC_PACKET_HEADER
{
ARC_PROTOCOL_HEADER ProtHeader;
USHORT FrameSequence;
UCHAR SplitFlag;
UCHAR LastSplitFlag;
UCHAR FramesReceived;
} ARC_PACKET_HEADER, *PARC_PACKET_HEADER;
typedef struct _ARC_PACKET
{
ARC_PACKET_HEADER Header;
struct _ARC_PACKET *Next;
ULONG TotalLength;
BOOLEAN LastFrame;
PARC_BUFFER_LIST FirstBuffer;
PARC_BUFFER_LIST LastBuffer;
NDIS_PACKET TmpNdisPacket;
} ARC_PACKET, *PARC_PACKET;
typedef struct _ARC_BINDING_INFO
{
PNDIS_OPEN_BLOCK NdisBindingHandle;
PVOID Reserved;
UINT PacketFilters;
ULONG References;
struct _ARC_BINDING_INFO *NextOpen;
BOOLEAN ReceivedAPacket;
UINT OldPacketFilters;
} ARC_BINDING_INFO,*PARC_BINDING_INFO;
typedef struct _ARC_FILTER
{
struct _NDIS_MINIPORT_BLOCK *Miniport;
UINT CombinedPacketFilter;
PARC_BINDING_INFO OpenList;
NDIS_HANDLE ReceiveBufferPool;
PARC_BUFFER_LIST FreeBufferList;
PARC_PACKET FreePackets;
PARC_PACKET OutstandingPackets;
UCHAR AdapterAddress;
UINT OldCombinedPacketFilter;
} ARC_FILTER,*PARC_FILTER;
BOOLEAN
NTAPI
ArcCreateFilter(
IN struct _NDIS_MINIPORT_BLOCK *Miniport,
IN UCHAR AdapterAddress,
OUT PARC_FILTER *Filter);
VOID
NTAPI
ArcDeleteFilter(
IN PARC_FILTER Filter);
BOOLEAN
NTAPI
ArcNoteFilterOpenAdapter(
IN PARC_FILTER Filter,
IN NDIS_HANDLE NdisBindingHandle,
OUT PNDIS_HANDLE NdisFilterHandle);
NDIS_STATUS
NTAPI
ArcDeleteFilterOpenAdapter(
IN PARC_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest);
NDIS_STATUS
NTAPI
ArcFilterAdjust(
IN PARC_FILTER Filter,
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_REQUEST NdisRequest,
IN UINT FilterClasses,
IN BOOLEAN Set);
VOID
NTAPI
ArcFilterDprIndicateReceiveComplete(
IN PARC_FILTER Filter);
VOID
NTAPI
ArcFilterDprIndicateReceive(
IN PARC_FILTER Filter,
IN PUCHAR pRawHeader,
IN PUCHAR pData,
IN UINT Length);
NDIS_STATUS
NTAPI
ArcFilterTransferData(
IN PARC_FILTER Filter,
IN NDIS_HANDLE MacReceiveContext,
IN UINT ByteOffset,
IN UINT BytesToTransfer,
OUT PNDIS_PACKET Packet,
OUT PUINT BytesTransfered);
VOID
NTAPI
ArcFreeNdisPacket(
IN PARC_PACKET Packet);
VOID
NTAPI
ArcFilterDoIndication(
IN PARC_FILTER Filter,
IN PARC_PACKET Packet);
VOID
NTAPI
ArcDestroyPacket(
IN PARC_FILTER Filter,
IN PARC_PACKET Packet);
#ifdef __cplusplus
}
#endif
#endif /* _ARC_FILTER_DEFS_ */