a4dd8513c255c4aa5c95dd53c3838f594fbed05d
[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 } AFDFCB, *PAFDFCB;
80
81 /* Socket states */
82 #define SOCKET_STATE_CREATED 0
83 #define SOCKET_STATE_BOUND 1
84 #define SOCKET_STATE_LISTENING 2
85
86 typedef struct IPSNMP_INFO {
87 ULONG Forwarding;
88 ULONG DefaultTTL;
89 ULONG InReceives;
90 ULONG InHdrErrors;
91 ULONG InAddrErrors;
92 ULONG ForwDatagrams;
93 ULONG InUnknownProtos;
94 ULONG InDiscards;
95 ULONG InDelivers;
96 ULONG OutRequests;
97 ULONG RoutingDiscards;
98 ULONG OutDiscards;
99 ULONG OutNoRoutes;
100 ULONG ReasmTimeout;
101 ULONG ReasmReqds;
102 ULONG ReasmOks;
103 ULONG ReasmFails;
104 ULONG FragOks;
105 ULONG FragFails;
106 ULONG FragCreates;
107 ULONG NumIf;
108 ULONG NumAddr;
109 ULONG NumRoutes;
110 } IPSNMP_INFO, *PIPSNMP_INFO;
111
112 typedef struct IPADDR_ENTRY {
113 ULONG Addr;
114 ULONG Index;
115 ULONG Mask;
116 ULONG BcastAddr;
117 ULONG ReasmSize;
118 USHORT Context;
119 USHORT Pad;
120 } IPADDR_ENTRY, *PIPADDR_ENTRY;
121
122
123 #define TL_INSTANCE 0
124
125 #define IP_MIB_STATS_ID 0x1
126 #define IP_MIB_ADDRTABLE_ENTRY_ID 0x102
127
128
129 /* IOCTL codes */
130
131 #define IOCTL_TCP_QUERY_INFORMATION_EX \
132 CTL_CODE(FILE_DEVICE_NETWORK, 0, METHOD_NEITHER, FILE_ANY_ACCESS)
133
134 #define IOCTL_TCP_SET_INFORMATION_EX \
135 CTL_CODE(FILE_DEVICE_NETWORK, 1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
136
137
138 #ifdef i386
139
140 /* DWORD network to host byte order conversion for i386 */
141 #define DN2H(dw) \
142 ((((dw) & 0xFF000000L) >> 24) | \
143 (((dw) & 0x00FF0000L) >> 8) | \
144 (((dw) & 0x0000FF00L) << 8) | \
145 (((dw) & 0x000000FFL) << 24))
146
147 /* DWORD host to network byte order conversion for i386 */
148 #define DH2N(dw) \
149 ((((dw) & 0xFF000000L) >> 24) | \
150 (((dw) & 0x00FF0000L) >> 8) | \
151 (((dw) & 0x0000FF00L) << 8) | \
152 (((dw) & 0x000000FFL) << 24))
153
154 /* WORD network to host order conversion for i386 */
155 #define WN2H(w) \
156 ((((w) & 0xFF00) >> 8) | \
157 (((w) & 0x00FF) << 8))
158
159 /* WORD host to network byte order conversion for i386 */
160 #define WH2N(w) \
161 ((((w) & 0xFF00) >> 8) | \
162 (((w) & 0x00FF) << 8))
163
164 #else /* i386 */
165
166 /* DWORD network to host byte order conversion for other architectures */
167 #define DN2H(dw) \
168 (dw)
169
170 /* DWORD host to network byte order conversion for other architectures */
171 #define DH2N(dw) \
172 (dw)
173
174 /* WORD network to host order conversion for other architectures */
175 #define WN2H(w) \
176 (w)
177
178 /* WORD host to network byte order conversion for other architectures */
179 #define WH2N(w) \
180 (w)
181
182 #endif /* i386 */
183
184
185 /* Prototypes from dispatch.c */
186
187 NTSTATUS AfdDispBind(
188 PIRP Irp,
189 PIO_STACK_LOCATION IrpSp);
190
191 NTSTATUS AfdDispListen(
192 PIRP Irp,
193 PIO_STACK_LOCATION IrpSp);
194
195 NTSTATUS AfdDispSendTo(
196 PIRP Irp,
197 PIO_STACK_LOCATION IrpSp);
198
199 NTSTATUS AfdDispRecvFrom(
200 PIRP Irp,
201 PIO_STACK_LOCATION IrpSp);
202
203 /* Prototypes from event.c */
204
205 NTSTATUS AfdRegisterEventHandlers(
206 PAFDFCB FCB);
207
208 NTSTATUS AfdDeregisterEventHandlers(
209 PAFDFCB FCB);
210
211 /* Prototypes from opnclose.c */
212
213 NTSTATUS AfdCreate(
214 PDEVICE_OBJECT DeviceObject,
215 PIRP Irp);
216
217 NTSTATUS AfdCreateNamedPipe(
218 PDEVICE_OBJECT DeviceObject,
219 PIRP Irp);
220
221 NTSTATUS AfdClose(
222 PDEVICE_OBJECT DeviceObject,
223 PIRP Irp);
224
225 /* Prototypes from rdwr.c */
226
227 NTSTATUS AfdEventReceiveDatagramHandler(
228 IN PVOID TdiEventContext,
229 IN LONG SourceAddressLength,
230 IN PVOID SourceAddress,
231 IN LONG OptionsLength,
232 IN PVOID Options,
233 IN ULONG ReceiveDatagramFlags,
234 IN ULONG BytesIndicated,
235 IN ULONG BytesAvailable,
236 OUT ULONG * BytesTaken,
237 IN PVOID Tsdu,
238 OUT PIRP * IoRequestPacket);
239
240 NTSTATUS AfdRead(
241 PDEVICE_OBJECT DeviceObject,
242 PIRP Irp);
243
244 NTSTATUS AfdWrite(
245 PDEVICE_OBJECT DeviceObject,
246 PIRP Irp);
247
248 /* Prototypes from tdi.c */
249
250 NTSTATUS TdiCloseDevice(
251 HANDLE Handle,
252 PFILE_OBJECT FileObject);
253
254 NTSTATUS TdiOpenAddressFileIPv4(
255 PUNICODE_STRING DeviceName,
256 LPSOCKADDR Name,
257 PHANDLE AddressHandle,
258 PFILE_OBJECT *AddressObject);
259
260 NTSTATUS TdiSetEventHandler(
261 PFILE_OBJECT FileObject,
262 LONG EventType,
263 PVOID Handler,
264 PVOID Context);
265
266 NTSTATUS TdiQueryDeviceControl(
267 PFILE_OBJECT FileObject,
268 ULONG IoControlCode,
269 PVOID InputBuffer,
270 ULONG InputBufferLength,
271 PVOID OutputBuffer,
272 ULONG OutputBufferLength,
273 PULONG Return);
274
275 NTSTATUS TdiQueryInformationEx(
276 PFILE_OBJECT FileObject,
277 ULONG Entity,
278 ULONG Instance,
279 ULONG Class,
280 ULONG Type,
281 ULONG Id,
282 PVOID OutputBuffer,
283 PULONG OutputLength);
284
285 NTSTATUS TdiQueryAddress(
286 PFILE_OBJECT FileObject,
287 PULONG Address);
288
289 NTSTATUS TdiSend(
290 PFILE_OBJECT TransportObject,
291 PFILE_REQUEST_SENDTO Request);
292
293 NTSTATUS TdiSendDatagram(
294 PFILE_OBJECT TransportObject,
295 LPSOCKADDR Address,
296 PVOID Buffer,
297 ULONG BufferSize);
298
299 #endif /*__AFD_H */
300
301 /* EOF */