1 | /*
|
---|
2 | * afilter.h
|
---|
3 | *
|
---|
4 | * Address filtering for NDIS MACs
|
---|
5 | *
|
---|
6 | * This file is part of the w32api package.
|
---|
7 | *
|
---|
8 | * Contributors:
|
---|
9 | * Created by Filip Navara <xnavara@volny.cz>
|
---|
10 | *
|
---|
11 | * THIS SOFTWARE IS NOT COPYRIGHTED
|
---|
12 | *
|
---|
13 | * This source code is offered for use in the public domain. You may
|
---|
14 | * use, modify or distribute it freely.
|
---|
15 | *
|
---|
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.
|
---|
20 | *
|
---|
21 | */
|
---|
22 |
|
---|
23 | #ifndef _ARC_FILTER_DEFS_
|
---|
24 | #define _ARC_FILTER_DEFS_
|
---|
25 |
|
---|
26 | #ifdef __cplusplus
|
---|
27 | extern "C" {
|
---|
28 | #endif
|
---|
29 |
|
---|
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)
|
---|
38 |
|
---|
39 | #define ARC_IS_BROADCAST(Address) (BOOLEAN)(!(Address))
|
---|
40 |
|
---|
41 | #define ARC_QUERY_FILTER_CLASSES(Filter) ((Filter)->CombinedPacketFilter)
|
---|
42 | #define ARC_QUERY_PACKET_FILTER(Filter, NdisFilterHandle) \
|
---|
43 | (((PARC_BINDING_INFO)(NdisFilterHandle))->PacketFilters)
|
---|
44 |
|
---|
45 | typedef ULONG MASK, *PMASK;
|
---|
46 |
|
---|
47 | typedef struct _ARC_BUFFER_LIST
|
---|
48 | {
|
---|
49 | PVOID Buffer;
|
---|
50 | UINT Size;
|
---|
51 | UINT BytesLeft;
|
---|
52 | struct _ARC_BUFFER_LIST *Next;
|
---|
53 | } ARC_BUFFER_LIST, *PARC_BUFFER_LIST;
|
---|
54 |
|
---|
55 | typedef struct _ARC_PROTOCOL_HEADER
|
---|
56 | {
|
---|
57 | UCHAR SourceId[ARCNET_ADDRESS_LEN];
|
---|
58 | UCHAR DestId[ARCNET_ADDRESS_LEN];
|
---|
59 | UCHAR ProtId;
|
---|
60 | } ARC_PROTOCOL_HEADER, *PARC_PROTOCOL_HEADER;
|
---|
61 |
|
---|
62 | typedef struct _ARC_PACKET_HEADER
|
---|
63 | {
|
---|
64 | ARC_PROTOCOL_HEADER ProtHeader;
|
---|
65 | USHORT FrameSequence;
|
---|
66 | UCHAR SplitFlag;
|
---|
67 | UCHAR LastSplitFlag;
|
---|
68 | UCHAR FramesReceived;
|
---|
69 | } ARC_PACKET_HEADER, *PARC_PACKET_HEADER;
|
---|
70 |
|
---|
71 | typedef struct _ARC_PACKET
|
---|
72 | {
|
---|
73 | ARC_PACKET_HEADER Header;
|
---|
74 | struct _ARC_PACKET *Next;
|
---|
75 | ULONG TotalLength;
|
---|
76 | BOOLEAN LastFrame;
|
---|
77 | PARC_BUFFER_LIST FirstBuffer;
|
---|
78 | PARC_BUFFER_LIST LastBuffer;
|
---|
79 | NDIS_PACKET TmpNdisPacket;
|
---|
80 | } ARC_PACKET, *PARC_PACKET;
|
---|
81 |
|
---|
82 | typedef struct _ARC_BINDING_INFO
|
---|
83 | {
|
---|
84 | PNDIS_OPEN_BLOCK NdisBindingHandle;
|
---|
85 | PVOID Reserved;
|
---|
86 | UINT PacketFilters;
|
---|
87 | ULONG References;
|
---|
88 | struct _ARC_BINDING_INFO *NextOpen;
|
---|
89 | BOOLEAN ReceivedAPacket;
|
---|
90 | UINT OldPacketFilters;
|
---|
91 | } ARC_BINDING_INFO,*PARC_BINDING_INFO;
|
---|
92 |
|
---|
93 | typedef struct _ARC_FILTER
|
---|
94 | {
|
---|
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;
|
---|
105 |
|
---|
106 | BOOLEAN
|
---|
107 | NTAPI
|
---|
108 | ArcCreateFilter(
|
---|
109 | IN struct _NDIS_MINIPORT_BLOCK *Miniport,
|
---|
110 | IN UCHAR AdapterAddress,
|
---|
111 | OUT PARC_FILTER *Filter);
|
---|
112 |
|
---|
113 | VOID
|
---|
114 | NTAPI
|
---|
115 | ArcDeleteFilter(
|
---|
116 | IN PARC_FILTER Filter);
|
---|
117 |
|
---|
118 | BOOLEAN
|
---|
119 | NTAPI
|
---|
120 | ArcNoteFilterOpenAdapter(
|
---|
121 | IN PARC_FILTER Filter,
|
---|
122 | IN NDIS_HANDLE NdisBindingHandle,
|
---|
123 | OUT PNDIS_HANDLE NdisFilterHandle);
|
---|
124 |
|
---|
125 | NDIS_STATUS
|
---|
126 | NTAPI
|
---|
127 | ArcDeleteFilterOpenAdapter(
|
---|
128 | IN PARC_FILTER Filter,
|
---|
129 | IN NDIS_HANDLE NdisFilterHandle,
|
---|
130 | IN PNDIS_REQUEST NdisRequest);
|
---|
131 |
|
---|
132 | NDIS_STATUS
|
---|
133 | NTAPI
|
---|
134 | ArcFilterAdjust(
|
---|
135 | IN PARC_FILTER Filter,
|
---|
136 | IN NDIS_HANDLE NdisFilterHandle,
|
---|
137 | IN PNDIS_REQUEST NdisRequest,
|
---|
138 | IN UINT FilterClasses,
|
---|
139 | IN BOOLEAN Set);
|
---|
140 |
|
---|
141 | VOID
|
---|
142 | NTAPI
|
---|
143 | ArcFilterDprIndicateReceiveComplete(
|
---|
144 | IN PARC_FILTER Filter);
|
---|
145 |
|
---|
146 | VOID
|
---|
147 | NTAPI
|
---|
148 | ArcFilterDprIndicateReceive(
|
---|
149 | IN PARC_FILTER Filter,
|
---|
150 | IN PUCHAR pRawHeader,
|
---|
151 | IN PUCHAR pData,
|
---|
152 | IN UINT Length);
|
---|
153 |
|
---|
154 | NDIS_STATUS
|
---|
155 | NTAPI
|
---|
156 | ArcFilterTransferData(
|
---|
157 | IN PARC_FILTER Filter,
|
---|
158 | IN NDIS_HANDLE MacReceiveContext,
|
---|
159 | IN UINT ByteOffset,
|
---|
160 | IN UINT BytesToTransfer,
|
---|
161 | OUT PNDIS_PACKET Packet,
|
---|
162 | OUT PUINT BytesTransfered);
|
---|
163 |
|
---|
164 | VOID
|
---|
165 | NTAPI
|
---|
166 | ArcFreeNdisPacket(
|
---|
167 | IN PARC_PACKET Packet);
|
---|
168 |
|
---|
169 | VOID
|
---|
170 | NTAPI
|
---|
171 | ArcFilterDoIndication(
|
---|
172 | IN PARC_FILTER Filter,
|
---|
173 | IN PARC_PACKET Packet);
|
---|
174 |
|
---|
175 | VOID
|
---|
176 | NTAPI
|
---|
177 | ArcDestroyPacket(
|
---|
178 | IN PARC_FILTER Filter,
|
---|
179 | IN PARC_PACKET Packet);
|
---|
180 |
|
---|
181 | #ifdef __cplusplus
|
---|
182 | }
|
---|
183 | #endif
|
---|
184 |
|
---|
185 | #endif /* _ARC_FILTER_DEFS_ */
|
---|