Work on winsock stack and indentation corrections.
[reactos.git] / reactos / drivers / net / afd / include / afd.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Ancillary Function Driver
4 * FILE: include/afd.h
5 * PURPOSE: Main driver header
6 */
7 #ifndef __AFD_H
8 #define __AFD_H
9
10 #include <winsock2.h>
11 #include <ddk/ntddk.h>
12 #include <net/tdikrnl.h>
13 #include <net/tdiinfo.h>
14 #include <afd/shared.h>
15 #include <debug.h>
16
17 /* Forward declarations */
18 struct _AFDFCB;
19
20 typedef struct _DEVICE_EXTENSION {
21 PDEVICE_OBJECT StorageDevice;
22 KSPIN_LOCK FCBListLock;
23 LIST_ENTRY FCBListHead;
24 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
25
26 /* Context Control Block structure */
27 typedef struct _AFDCCB {
28 struct _AFDFCB *FCB;
29 LIST_ENTRY ListEntry;
30 PFILE_OBJECT FileObject;
31 ULONG Flags;
32 LARGE_INTEGER CurrentByteOffset;
33 } AFDCCB, *PAFDCCB;
34
35 /* Flags for CCB structure */
36 #define CCB_CLEANED 0x00000001
37
38 /* Borrowed from http://www.acc.umu.se/~bosse/ntifs.h by Bo Branten */
39 typedef struct _FSRTL_COMMON_FCB_HEADER {
40 CSHORT NodeTypeCode;
41 CSHORT NodeByteSize;
42 UCHAR Flags;
43 UCHAR IsFastIoPossible;
44 UCHAR Flags2;
45 UCHAR Reserved;
46 PERESOURCE Resource;
47 PERESOURCE PagingIoResource;
48 LARGE_INTEGER AllocationSize;
49 LARGE_INTEGER FileSize;
50 LARGE_INTEGER ValidDataLength;
51 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
52
53 typedef struct _FsdNTRequiredFCB {
54 FSRTL_COMMON_FCB_HEADER CommonFCBHeader;
55 SECTION_OBJECT_POINTERS SectionObject;
56 ERESOURCE MainResource;
57 ERESOURCE PagingIoResource;
58 } FsdNTRequiredFCB, *PFsdNTRequiredFCB;
59
60 typedef struct _AFDFCB {
61 FsdNTRequiredFCB NTRequiredFCB;
62 LIST_ENTRY ListEntry;
63 PDEVICE_EXTENSION DeviceExt;
64 SHARE_ACCESS ShareAccess;
65 ULONG ReferenceCount;
66 ULONG OpenHandleCount;
67 HANDLE TdiAddressObjectHandle;
68 PFILE_OBJECT TdiAddressObject;
69 HANDLE TdiConnectionObjectHandle;
70 PFILE_OBJECT TdiConnectionObject;
71 LIST_ENTRY CCBListHead;
72 INT AddressFamily;
73 INT SocketType;
74 INT Protocol;
75 PVOID HelperContext;
76 DWORD NotificationEvents;
77 UNICODE_STRING TdiDeviceName;
78 DWORD State;
79 PVOID SendBuffer;
80 } AFDFCB, *PAFDFCB;
81
82 /* Socket states */
83 #define SOCKET_STATE_CREATED 0
84 #define SOCKET_STATE_BOUND 1
85 #define SOCKET_STATE_LISTENING 2
86
87 typedef struct IPSNMP_INFO {
88 ULONG Forwarding;
89 ULONG DefaultTTL;
90 ULONG InReceives;
91 ULONG InHdrErrors;
92 ULONG InAddrErrors;
93 ULONG ForwDatagrams;
94 ULONG InUnknownProtos;
95 ULONG InDiscards;
96 ULONG InDelivers;
97 ULONG OutRequests;
98 ULONG RoutingDiscards;
99 ULONG OutDiscards;
100 ULONG OutNoRoutes;
101 ULONG ReasmTimeout;
102 ULONG ReasmReqds;
103 ULONG ReasmOks;
104 ULONG ReasmFails;
105 ULONG FragOks;
106 ULONG FragFails;
107 ULONG FragCreates;
108 ULONG NumIf;
109 ULONG NumAddr;
110 ULONG NumRoutes;
111 } IPSNMP_INFO, *PIPSNMP_INFO;
112
113 typedef struct IPADDR_ENTRY {
114 ULONG Addr;
115 ULONG Index;
116 ULONG Mask;
117 ULONG BcastAddr;
118 ULONG ReasmSize;
119 USHORT Context;
120 USHORT Pad;
121 } IPADDR_ENTRY, *PIPADDR_ENTRY;
122
123
124 #define TL_INSTANCE 0
125
126 #define IP_MIB_STATS_ID 0x1
127 #define IP_MIB_ADDRTABLE_ENTRY_ID 0x102
128
129
130 /* IOCTL codes */
131
132 #define IOCTL_TCP_QUERY_INFORMATION_EX \
133 CTL_CODE(FILE_DEVICE_NETWORK, 0, METHOD_NEITHER, FILE_ANY_ACCESS)
134
135 #define IOCTL_TCP_SET_INFORMATION_EX \
136 CTL_CODE(FILE_DEVICE_NETWORK, 1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
137
138
139 #ifdef i386
140
141 /* DWORD network to host byte order conversion for i386 */
142 #define DN2H(dw) \
143 ((((dw) & 0xFF000000L) >> 24) | \
144 (((dw) & 0x00FF0000L) >> 8) | \
145 (((dw) & 0x0000FF00L) << 8) | \
146 (((dw) & 0x000000FFL) << 24))
147
148 /* DWORD host to network byte order conversion for i386 */
149 #define DH2N(dw) \
150 ((((dw) & 0xFF000000L) >> 24) | \
151 (((dw) & 0x00FF0000L) >> 8) | \
152 (((dw) & 0x0000FF00L) << 8) | \
153 (((dw) & 0x000000FFL) << 24))
154
155 /* WORD network to host order conversion for i386 */
156 #define WN2H(w) \
157 ((((w) & 0xFF00) >> 8) | \
158 (((w) & 0x00FF) << 8))
159
160 /* WORD host to network byte order conversion for i386 */
161 #define WH2N(w) \
162 ((((w) & 0xFF00) >> 8) | \
163 (((w) & 0x00FF) << 8))
164
165 #else /* i386 */
166
167 /* DWORD network to host byte order conversion for other architectures */
168 #define DN2H(dw) \
169 (dw)
170
171 /* DWORD host to network byte order conversion for other architectures */
172 #define DH2N(dw) \
173 (dw)
174
175 /* WORD network to host order conversion for other architectures */
176 #define WN2H(w) \
177 (w)
178
179 /* WORD host to network byte order conversion for other architectures */
180 #define WH2N(w) \
181 (w)
182
183 #endif /* i386 */
184
185
186 /* Prototypes from dispatch.c */
187
188 NTSTATUS AfdDispBind(
189 PIRP Irp,
190 PIO_STACK_LOCATION IrpSp);
191
192 NTSTATUS AfdDispListen(
193 PIRP Irp,
194 PIO_STACK_LOCATION IrpSp);
195
196 NTSTATUS AfdDispSendTo(
197 PIRP Irp,
198 PIO_STACK_LOCATION IrpSp);
199
200 NTSTATUS AfdDispRecvFrom(
201 PIRP Irp,
202 PIO_STACK_LOCATION IrpSp);
203
204 /* Prototypes from event.c */
205
206 NTSTATUS AfdRegisterEventHandlers(
207 PAFDFCB FCB);
208
209 NTSTATUS AfdDeregisterEventHandlers(
210 PAFDFCB FCB);
211
212 /* Prototypes from opnclose.c */
213
214 NTSTATUS STDCALL AfdCreate(
215 PDEVICE_OBJECT DeviceObject,
216 PIRP Irp);
217
218 NTSTATUS STDCALL AfdClose(
219 PDEVICE_OBJECT DeviceObject,
220 PIRP Irp);
221
222 /* Prototypes from rdwr.c */
223
224 NTSTATUS AfdEventReceiveDatagramHandler(
225 IN PVOID TdiEventContext,
226 IN LONG SourceAddressLength,
227 IN PVOID SourceAddress,
228 IN LONG OptionsLength,
229 IN PVOID Options,
230 IN ULONG ReceiveDatagramFlags,
231 IN ULONG BytesIndicated,
232 IN ULONG BytesAvailable,
233 OUT ULONG * BytesTaken,
234 IN PVOID Tsdu,
235 OUT PIRP * IoRequestPacket);
236
237 NTSTATUS STDCALL AfdRead(
238 PDEVICE_OBJECT DeviceObject,
239 PIRP Irp);
240
241 NTSTATUS STDCALL AfdWrite(
242 PDEVICE_OBJECT DeviceObject,
243 PIRP Irp);
244
245 /* Prototypes from routines.c */
246
247 ULONG WSABufferSize(
248 LPWSABUF Buffers,
249 DWORD BufferCount);
250
251 NTSTATUS MergeWSABuffers(
252 LPWSABUF Buffers,
253 DWORD BufferCount,
254 PVOID Destination,
255 ULONG MaxLength,
256 PULONG BytesCopied);
257
258 /* Prototypes from tdi.c */
259
260 NTSTATUS TdiCloseDevice(
261 HANDLE Handle,
262 PFILE_OBJECT FileObject);
263
264 NTSTATUS TdiOpenAddressFileIPv4(
265 PUNICODE_STRING DeviceName,
266 LPSOCKADDR Name,
267 PHANDLE AddressHandle,
268 PFILE_OBJECT *AddressObject);
269
270 NTSTATUS TdiOpenAddressFile(
271 PUNICODE_STRING DeviceName,
272 LPSOCKADDR Name,
273 PHANDLE AddressHandle,
274 PFILE_OBJECT *AddressObject);
275
276 NTSTATUS TdiSetEventHandler(
277 PFILE_OBJECT FileObject,
278 LONG EventType,
279 PVOID Handler,
280 PVOID Context);
281
282 NTSTATUS TdiQueryDeviceControl(
283 PFILE_OBJECT FileObject,
284 ULONG IoControlCode,
285 PVOID InputBuffer,
286 ULONG InputBufferLength,
287 PVOID OutputBuffer,
288 ULONG OutputBufferLength,
289 PULONG Return);
290
291 NTSTATUS TdiQueryInformationEx(
292 PFILE_OBJECT FileObject,
293 ULONG Entity,
294 ULONG Instance,
295 ULONG Class,
296 ULONG Type,
297 ULONG Id,
298 PVOID OutputBuffer,
299 PULONG OutputLength);
300
301 NTSTATUS TdiQueryAddress(
302 PFILE_OBJECT FileObject,
303 PULONG Address);
304
305 NTSTATUS TdiSend(
306 PFILE_OBJECT TransportObject,
307 PVOID Buffer,
308 ULONG BufferSize);
309
310 NTSTATUS TdiSendDatagram(
311 PFILE_OBJECT TransportObject,
312 LPSOCKADDR Address,
313 PMDL Mdl,
314 ULONG BufferSize);
315
316 #endif /*__AFD_H */
317
318 /* EOF */