4 * Address filtering for NDIS MACs
6 * This file is part of the w32api package.
9 * Created by Filip Navara <xnavara@volny.cz>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
23 #ifndef _ARC_FILTER_DEFS_
24 #define _ARC_FILTER_DEFS_
30 #define ARC_RECEIVE_BUFFERS 64
31 #define ARCNET_ADDRESS_LEN 1
32 #define ARC_PROTOCOL_HEADER_SIZE (sizeof(ARC_PROTOCOL_HEADER))
33 #define ARC_MAX_FRAME_SIZE 504
34 #define ARC_MAX_ADDRESS_IDS 256
35 #define ARC_MAX_FRAME_HEADER_SIZE 6
36 #define ARC_MAX_PACKET_SIZE 576
37 #define ARC_FILTER_MAX_OPENS (sizeof(ULONG) * 8)
39 #define ARC_IS_BROADCAST(Address) (BOOLEAN)(!(Address))
41 #define ARC_QUERY_FILTER_CLASSES(Filter) ((Filter)->CombinedPacketFilter)
42 #define ARC_QUERY_PACKET_FILTER(Filter, NdisFilterHandle) \
43 (((PARC_BINDING_INFO)(NdisFilterHandle))->PacketFilters)
45 typedef ULONG MASK
, *PMASK
;
47 typedef struct _ARC_BUFFER_LIST
52 struct _ARC_BUFFER_LIST
*Next
;
53 } ARC_BUFFER_LIST
, *PARC_BUFFER_LIST
;
55 typedef struct _ARC_PROTOCOL_HEADER
57 UCHAR SourceId
[ARCNET_ADDRESS_LEN
];
58 UCHAR DestId
[ARCNET_ADDRESS_LEN
];
60 } ARC_PROTOCOL_HEADER
, *PARC_PROTOCOL_HEADER
;
62 typedef struct _ARC_PACKET_HEADER
64 ARC_PROTOCOL_HEADER ProtHeader
;
69 } ARC_PACKET_HEADER
, *PARC_PACKET_HEADER
;
71 typedef struct _ARC_PACKET
73 ARC_PACKET_HEADER Header
;
74 struct _ARC_PACKET
*Next
;
77 PARC_BUFFER_LIST FirstBuffer
;
78 PARC_BUFFER_LIST LastBuffer
;
79 NDIS_PACKET TmpNdisPacket
;
80 } ARC_PACKET
, *PARC_PACKET
;
82 typedef struct _ARC_BINDING_INFO
84 PNDIS_OPEN_BLOCK NdisBindingHandle
;
88 struct _ARC_BINDING_INFO
*NextOpen
;
89 BOOLEAN ReceivedAPacket
;
90 UINT OldPacketFilters
;
91 } ARC_BINDING_INFO
,*PARC_BINDING_INFO
;
93 typedef struct _ARC_FILTER
95 struct _NDIS_MINIPORT_BLOCK
*Miniport
;
96 UINT CombinedPacketFilter
;
97 PARC_BINDING_INFO OpenList
;
98 NDIS_HANDLE ReceiveBufferPool
;
99 PARC_BUFFER_LIST FreeBufferList
;
100 PARC_PACKET FreePackets
;
101 PARC_PACKET OutstandingPackets
;
102 UCHAR AdapterAddress
;
103 UINT OldCombinedPacketFilter
;
104 } ARC_FILTER
,*PARC_FILTER
;
109 IN
struct _NDIS_MINIPORT_BLOCK
*Miniport
,
110 IN UCHAR AdapterAddress
,
111 OUT PARC_FILTER
*Filter
);
116 IN PARC_FILTER Filter
);
120 ArcNoteFilterOpenAdapter(
121 IN PARC_FILTER Filter
,
122 IN NDIS_HANDLE NdisBindingHandle
,
123 OUT PNDIS_HANDLE NdisFilterHandle
);
127 ArcDeleteFilterOpenAdapter(
128 IN PARC_FILTER Filter
,
129 IN NDIS_HANDLE NdisFilterHandle
,
130 IN PNDIS_REQUEST NdisRequest
);
135 IN PARC_FILTER Filter
,
136 IN NDIS_HANDLE NdisFilterHandle
,
137 IN PNDIS_REQUEST NdisRequest
,
138 IN UINT FilterClasses
,
143 ArcFilterDprIndicateReceiveComplete(
144 IN PARC_FILTER Filter
);
148 ArcFilterDprIndicateReceive(
149 IN PARC_FILTER Filter
,
150 IN PUCHAR pRawHeader
,
156 ArcFilterTransferData(
157 IN PARC_FILTER Filter
,
158 IN NDIS_HANDLE MacReceiveContext
,
160 IN UINT BytesToTransfer
,
161 OUT PNDIS_PACKET Packet
,
162 OUT PUINT BytesTransfered
);
167 IN PARC_PACKET Packet
);
171 ArcFilterDoIndication(
172 IN PARC_FILTER Filter
,
173 IN PARC_PACKET Packet
);
178 IN PARC_FILTER Filter
,
179 IN PARC_PACKET Packet
);
185 #endif /* _ARC_FILTER_DEFS_ */