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.
27 #pragma GCC system_header
34 #define ARC_RECEIVE_BUFFERS 64
35 #define ARCNET_ADDRESS_LEN 1
36 #define ARC_PROTOCOL_HEADER_SIZE (sizeof(ARC_PROTOCOL_HEADER))
37 #define ARC_MAX_FRAME_SIZE 504
38 #define ARC_MAX_ADDRESS_IDS 256
39 #define ARC_MAX_FRAME_HEADER_SIZE 6
40 #define ARC_MAX_PACKET_SIZE 576
41 #define ARC_FILTER_MAX_OPENS (sizeof(ULONG) * 8)
43 #define ARC_IS_BROADCAST(Address) (BOOLEAN)(!(Address))
45 #define ARC_QUERY_FILTER_CLASSES(Filter) ((Filter)->CombinedPacketFilter)
46 #define ARC_QUERY_PACKET_FILTER(Filter, NdisFilterHandle) \
47 (((PARC_BINDING_INFO)(NdisFilterHandle))->PacketFilters)
49 typedef ULONG MASK
, *PMASK
;
51 typedef struct _ARC_BUFFER_LIST
56 struct _ARC_BUFFER_LIST
*Next
;
57 } ARC_BUFFER_LIST
, *PARC_BUFFER_LIST
;
59 typedef struct _ARC_PROTOCOL_HEADER
61 UCHAR SourceId
[ARCNET_ADDRESS_LEN
];
62 UCHAR DestId
[ARCNET_ADDRESS_LEN
];
64 } ARC_PROTOCOL_HEADER
, *PARC_PROTOCOL_HEADER
;
66 typedef struct _ARC_PACKET_HEADER
68 ARC_PROTOCOL_HEADER ProtHeader
;
73 } ARC_PACKET_HEADER
, *PARC_PACKET_HEADER
;
75 typedef struct _ARC_PACKET
77 ARC_PACKET_HEADER Header
;
78 struct _ARC_PACKET
*Next
;
81 PARC_BUFFER_LIST FirstBuffer
;
82 PARC_BUFFER_LIST LastBuffer
;
83 NDIS_PACKET TmpNdisPacket
;
84 } ARC_PACKET
, *PARC_PACKET
;
86 typedef struct _ARC_BINDING_INFO
88 PNDIS_OPEN_BLOCK NdisBindingHandle
;
92 struct _ARC_BINDING_INFO
*NextOpen
;
93 BOOLEAN ReceivedAPacket
;
94 UINT OldPacketFilters
;
95 } ARC_BINDING_INFO
,*PARC_BINDING_INFO
;
97 typedef struct _ARC_FILTER
99 struct _NDIS_MINIPORT_BLOCK
*Miniport
;
100 UINT CombinedPacketFilter
;
101 PARC_BINDING_INFO OpenList
;
102 NDIS_HANDLE ReceiveBufferPool
;
103 PARC_BUFFER_LIST FreeBufferList
;
104 PARC_PACKET FreePackets
;
105 PARC_PACKET OutstandingPackets
;
106 UCHAR AdapterAddress
;
107 UINT OldCombinedPacketFilter
;
108 } ARC_FILTER
,*PARC_FILTER
;
113 IN
struct _NDIS_MINIPORT_BLOCK
*Miniport
,
114 IN UCHAR AdapterAddress
,
115 OUT PARC_FILTER
*Filter
);
120 IN PARC_FILTER Filter
);
124 ArcNoteFilterOpenAdapter(
125 IN PARC_FILTER Filter
,
126 IN NDIS_HANDLE NdisBindingHandle
,
127 OUT PNDIS_HANDLE NdisFilterHandle
);
131 ArcDeleteFilterOpenAdapter(
132 IN PARC_FILTER Filter
,
133 IN NDIS_HANDLE NdisFilterHandle
,
134 IN PNDIS_REQUEST NdisRequest
);
139 IN PARC_FILTER Filter
,
140 IN NDIS_HANDLE NdisFilterHandle
,
141 IN PNDIS_REQUEST NdisRequest
,
142 IN UINT FilterClasses
,
147 ArcFilterDprIndicateReceiveComplete(
148 IN PARC_FILTER Filter
);
152 ArcFilterDprIndicateReceive(
153 IN PARC_FILTER Filter
,
154 IN PUCHAR pRawHeader
,
160 ArcFilterTransferData(
161 IN PARC_FILTER Filter
,
162 IN NDIS_HANDLE MacReceiveContext
,
164 IN UINT BytesToTransfer
,
165 OUT PNDIS_PACKET Packet
,
166 OUT PUINT BytesTransfered
);
171 IN PARC_PACKET Packet
);
175 ArcFilterDoIndication(
176 IN PARC_FILTER Filter
,
177 IN PARC_PACKET Packet
);
182 IN PARC_FILTER Filter
,
183 IN PARC_PACKET Packet
);
189 #endif /* __AFILTER_H */