| /* |
| * 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_ */ |