ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

afd.h
Go to the documentation of this file.
00001 /* $Id: afd.h 53016 2011-08-01 03:54:19Z cgutman $
00002  *
00003  * COPYRIGHT:        See COPYING in the top level directory
00004  * PROJECT:          ReactOS kernel
00005  * FILE:             drivers/net/afd/include/afd.h
00006  * PURPOSE:          Ancillary functions driver -- constants and structures
00007  * PROGRAMMER:       Art Yerkes (ayerkes@speakeasy.net)
00008  * UPDATE HISTORY:
00009  * 20040630 Created
00010  */
00011 
00012 #ifndef _AFD_H
00013 #define _AFD_H
00014 
00015 #include <ntddk.h>
00016 #include <ntifs.h>
00017 #include <ndk/obtypes.h>
00018 #include <ndk/obfuncs.h>
00019 #include <ndk/mmtypes.h>
00020 #include <ndk/mmfuncs.h>
00021 #include <tdi.h>
00022 #include <tdikrnl.h>
00023 #include <tdiinfo.h>
00024 #include <string.h>
00025 #define _WINBASE_
00026 #define _WINDOWS_H
00027 #define _INC_WINDOWS
00028 #include <windef.h>
00029 #include <winsock2.h>
00030 #include <afd/shared.h>
00031 #include <pseh/pseh2.h>
00032 
00033 #include "tdi_proto.h"
00034 #include "tdiconn.h"
00035 #include "debug.h"
00036 
00037 #ifndef MIN
00038 #define MIN(x,y) (((x)<(y))?(x):(y))
00039 #endif
00040 
00041 #define IOCTL_TCP_QUERY_INFORMATION_EX \
00042     CTL_CODE(FILE_DEVICE_NETWORK, 0, METHOD_NEITHER, FILE_ANY_ACCESS)
00043 
00044 #define TL_INSTANCE 0
00045 #define IP_MIB_STATS_ID 1
00046 #define IP_MIB_ADDRTABLE_ENTRY_ID 0x102
00047 
00048 typedef struct IPSNMP_INFO {
00049     ULONG Forwarding;
00050     ULONG DefaultTTL;
00051     ULONG InReceives;
00052     ULONG InHdrErrors;
00053     ULONG InAddrErrors;
00054     ULONG ForwDatagrams;
00055     ULONG InUnknownProtos;
00056     ULONG InDiscards;
00057     ULONG InDelivers;
00058     ULONG OutRequests;
00059     ULONG RoutingDiscards;
00060     ULONG OutDiscards;
00061     ULONG OutNoRoutes;
00062     ULONG ReasmTimeout;
00063     ULONG ReasmReqds;
00064     ULONG ReasmOks;
00065     ULONG ReasmFails;
00066     ULONG FragOks;
00067     ULONG FragFails;
00068     ULONG FragCreates;
00069     ULONG NumIf;
00070     ULONG NumAddr;
00071     ULONG NumRoutes;
00072 } IPSNMP_INFO, *PIPSNMP_INFO;
00073 
00074 typedef struct IPADDR_ENTRY {
00075     ULONG  Addr;
00076     ULONG  Index;
00077     ULONG  Mask;
00078     ULONG  BcastAddr;
00079     ULONG  ReasmSize;
00080     USHORT Context;
00081     USHORT Pad;
00082 } IPADDR_ENTRY, *PIPADDR_ENTRY;
00083 
00084 #define DN2H(dw) \
00085     ((((dw) & 0xFF000000L) >> 24) | \
00086      (((dw) & 0x00FF0000L) >> 8) | \
00087      (((dw) & 0x0000FF00L) << 8) | \
00088      (((dw) & 0x000000FFL) << 24))
00089 
00090 #define SOCKET_STATE_INVALID_TRANSITION ((DWORD)-1)
00091 #define SOCKET_STATE_CREATED            0
00092 #define SOCKET_STATE_BOUND              1
00093 #define SOCKET_STATE_CONNECTING         2
00094 #define SOCKET_STATE_CONNECTED          3
00095 #define SOCKET_STATE_LISTENING          4
00096 #define SOCKET_STATE_MASK               0x0000ffff
00097 #define SOCKET_STATE_EOF_READ           0x20000000
00098 #define SOCKET_STATE_LOCKED             0x40000000
00099 #define SOCKET_STATE_NEW                0x80000000
00100 #define SOCKET_STATE_CLOSED             0x00000100
00101 
00102 #define FUNCTION_CONNECT                0
00103 #define FUNCTION_RECV                   1
00104 #define FUNCTION_SEND                   2
00105 #define FUNCTION_PREACCEPT              3
00106 #define FUNCTION_ACCEPT                 4
00107 #define FUNCTION_DISCONNECT             5
00108 #define FUNCTION_CLOSE                  6
00109 #define MAX_FUNCTIONS                   7
00110 
00111 #define IN_FLIGHT_REQUESTS              5
00112 
00113 #define EXTRA_LOCK_BUFFERS              2 /* Number of extra buffers needed
00114                        * for ancillary data on packet
00115                        * requests. */
00116 
00117 /* XXX This is a hack we should clean up later
00118  * We do this in order to get some storage for the locked handle table
00119  * Maybe I'll use some tail item in the irp instead */
00120 #define AFD_HANDLES(x) ((PAFD_HANDLE)(x)->Exclusive)
00121 #define SET_AFD_HANDLES(x,y) (((x)->Exclusive) = (ULONG_PTR)(y))
00122 
00123 typedef struct _AFD_MAPBUF {
00124     PVOID BufferAddress;
00125     PMDL  Mdl;
00126 } AFD_MAPBUF, *PAFD_MAPBUF;
00127 
00128 typedef struct _AFD_DEVICE_EXTENSION {
00129     PDEVICE_OBJECT DeviceObject;
00130     LIST_ENTRY Polls;
00131     KSPIN_LOCK Lock;
00132 } AFD_DEVICE_EXTENSION, *PAFD_DEVICE_EXTENSION;
00133 
00134 typedef struct _AFD_ACTIVE_POLL {
00135     LIST_ENTRY ListEntry;
00136     PIRP Irp;
00137     PAFD_DEVICE_EXTENSION DeviceExt;
00138     KDPC TimeoutDpc;
00139     KTIMER Timer;
00140     PKEVENT EventObject;
00141     BOOLEAN Exclusive;
00142 } AFD_ACTIVE_POLL, *PAFD_ACTIVE_POLL;
00143 
00144 typedef struct _IRP_LIST {
00145     LIST_ENTRY ListEntry;
00146     PIRP Irp;
00147 } IRP_LIST, *PIRP_LIST;
00148 
00149 typedef struct _AFD_TDI_OBJECT {
00150     PFILE_OBJECT Object;
00151     HANDLE Handle;
00152 } AFD_TDI_OBJECT, *PAFD_TDI_OBJECT;
00153 
00154 typedef struct _AFD_TDI_OBJECT_QELT {
00155     LIST_ENTRY ListEntry;
00156     UINT Seq;
00157     PTDI_CONNECTION_INFORMATION ConnInfo;
00158     AFD_TDI_OBJECT Object;
00159 } AFD_TDI_OBJECT_QELT, *PAFD_TDI_OBJECT_QELT;
00160 
00161 typedef struct _AFD_IN_FLIGHT_REQUEST {
00162     PIRP InFlightRequest;
00163     IO_STATUS_BLOCK Iosb;
00164     PTDI_CONNECTION_INFORMATION ConnectionCallInfo;
00165     PTDI_CONNECTION_INFORMATION ConnectionReturnInfo;
00166 } AFD_IN_FLIGHT_REQUEST, *PAFD_IN_FLIGHT_REQUEST;
00167 
00168 typedef struct _AFD_DATA_WINDOW {
00169     PCHAR Window;
00170     UINT BytesUsed, Size, Content;
00171 } AFD_DATA_WINDOW, *PAFD_DATA_WINDOW;
00172 
00173 typedef struct _AFD_STORED_DATAGRAM {
00174     LIST_ENTRY ListEntry;
00175     UINT Len;
00176     PTRANSPORT_ADDRESS Address;
00177     CHAR Buffer[1];
00178 } AFD_STORED_DATAGRAM, *PAFD_STORED_DATAGRAM;
00179 
00180 typedef struct _AFD_FCB {
00181     BOOLEAN Locked, Critical, Overread, NonBlocking, OobInline, TdiReceiveClosed, SendClosed;
00182     UINT State, Flags, GroupID, GroupType;
00183     KIRQL OldIrql;
00184     UINT LockCount;
00185     PVOID CurrentThread;
00186     PFILE_OBJECT FileObject;
00187     PAFD_DEVICE_EXTENSION DeviceExt;
00188     BOOLEAN DelayedAccept;
00189     UINT ConnSeq;
00190     USHORT DisconnectFlags;
00191     BOOLEAN DisconnectPending;
00192     LARGE_INTEGER DisconnectTimeout;
00193     PTRANSPORT_ADDRESS LocalAddress, RemoteAddress;
00194     PTDI_CONNECTION_INFORMATION AddressFrom, ConnectCallInfo, ConnectReturnInfo;
00195     AFD_TDI_OBJECT AddressFile, Connection;
00196     AFD_IN_FLIGHT_REQUEST ConnectIrp, ListenIrp, ReceiveIrp, SendIrp, DisconnectIrp;
00197     AFD_DATA_WINDOW Send, Recv;
00198     KMUTEX Mutex;
00199     PKEVENT EventSelect;
00200     DWORD EventSelectTriggers;
00201     DWORD EventSelectDisabled;
00202     UNICODE_STRING TdiDeviceName;
00203     PVOID Context;
00204     DWORD PollState;
00205     NTSTATUS PollStatus[FD_MAX_EVENTS];
00206     UINT ContextSize;
00207     PVOID ConnectData;
00208     UINT FilledConnectData;
00209     UINT ConnectDataSize;
00210     PVOID DisconnectData;
00211     UINT FilledDisconnectData;
00212     UINT DisconnectDataSize;
00213     PVOID ConnectOptions;
00214     UINT FilledConnectOptions;
00215     UINT ConnectOptionsSize;
00216     PVOID DisconnectOptions;
00217     UINT FilledDisconnectOptions;
00218     UINT DisconnectOptionsSize;
00219     LIST_ENTRY PendingIrpList[MAX_FUNCTIONS];
00220     LIST_ENTRY DatagramList;
00221     LIST_ENTRY PendingConnections;
00222 } AFD_FCB, *PAFD_FCB;
00223 
00224 /* bind.c */
00225 
00226 NTSTATUS WarmSocketForBind( PAFD_FCB FCB );
00227 NTSTATUS NTAPI
00228 AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00229           PIO_STACK_LOCATION IrpSp);
00230 
00231 /* connect.c */
00232 
00233 NTSTATUS MakeSocketIntoConnection( PAFD_FCB FCB );
00234 NTSTATUS WarmSocketForConnection( PAFD_FCB FCB );
00235 NTSTATUS NTAPI
00236 AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00237                PIO_STACK_LOCATION IrpSp);
00238 NTSTATUS NTAPI
00239 AfdGetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00240               PIO_STACK_LOCATION IrpSp);
00241 NTSTATUS NTAPI
00242 AfdSetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00243                   PIO_STACK_LOCATION IrpSp);
00244 NTSTATUS NTAPI
00245 AfdSetConnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00246                       PIO_STACK_LOCATION IrpSp);
00247 NTSTATUS NTAPI
00248 AfdGetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00249                  PIO_STACK_LOCATION IrpSp);
00250 NTSTATUS NTAPI
00251 AfdSetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00252                      PIO_STACK_LOCATION IrpSp);
00253 NTSTATUS NTAPI
00254 AfdSetConnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00255                          PIO_STACK_LOCATION IrpSp);
00256 
00257 /* context.c */
00258 
00259 NTSTATUS NTAPI
00260 AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00261            PIO_STACK_LOCATION IrpSp );
00262 NTSTATUS NTAPI
00263 AfdGetContextSize( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00264                PIO_STACK_LOCATION IrpSp );
00265 NTSTATUS NTAPI
00266 AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00267            PIO_STACK_LOCATION IrpSp );
00268 
00269 /* info.c */
00270 
00271 NTSTATUS NTAPI
00272 AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00273         PIO_STACK_LOCATION IrpSp );
00274 
00275 NTSTATUS NTAPI
00276 AfdSetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00277         PIO_STACK_LOCATION IrpSp );
00278 
00279 NTSTATUS NTAPI
00280 AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00281                 PIO_STACK_LOCATION IrpSp );
00282 
00283 NTSTATUS NTAPI
00284 AfdGetPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00285                 PIO_STACK_LOCATION IrpSp );
00286 
00287 /* listen.c */
00288 NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00289                PIO_STACK_LOCATION IrpSp );
00290 
00291 NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00292              PIO_STACK_LOCATION IrpSp);
00293 
00294 NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00295             PIO_STACK_LOCATION IrpSp );
00296 
00297 /* lock.c */
00298 
00299 PAFD_WSABUF LockBuffers( PAFD_WSABUF Buf, UINT Count,
00300              PVOID AddressBuf, PINT AddressLen,
00301              BOOLEAN Write, BOOLEAN LockAddress );
00302 VOID UnlockBuffers( PAFD_WSABUF Buf, UINT Count, BOOL Address );
00303 BOOLEAN SocketAcquireStateLock( PAFD_FCB FCB );
00304 NTSTATUS NTAPI UnlockAndMaybeComplete
00305 ( PAFD_FCB FCB, NTSTATUS Status, PIRP Irp,
00306   UINT Information );
00307 VOID SocketStateUnlock( PAFD_FCB FCB );
00308 NTSTATUS LostSocket( PIRP Irp );
00309 PAFD_HANDLE LockHandles( PAFD_HANDLE HandleArray, UINT HandleCount );
00310 VOID UnlockHandles( PAFD_HANDLE HandleArray, UINT HandleCount );
00311 PVOID LockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp );
00312 VOID UnlockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp );
00313 PVOID GetLockedData( PIRP Irp, PIO_STACK_LOCATION IrpSp );
00314 NTSTATUS LeaveIrpUntilLater( PAFD_FCB FCB, PIRP Irp, UINT Function );
00315 NTSTATUS QueueUserModeIrp(PAFD_FCB FCB, PIRP Irp, UINT Function);
00316 
00317 /* main.c */
00318 
00319 VOID OskitDumpBuffer( PCHAR Buffer, UINT Len );
00320 VOID DestroySocket( PAFD_FCB FCB );
00321 VOID NTAPI AfdCancelHandler(PDEVICE_OBJECT DeviceObject,
00322                  PIRP Irp);
00323 VOID RetryDisconnectCompletion(PAFD_FCB FCB);
00324 BOOLEAN CheckUnlockExtraBuffers(PAFD_FCB FCB, PIO_STACK_LOCATION IrpSp);
00325 
00326 /* read.c */
00327 
00328 NTSTATUS NTAPI ReceiveComplete
00329 ( PDEVICE_OBJECT DeviceObject,
00330   PIRP Irp,
00331   PVOID Context );
00332 
00333 NTSTATUS NTAPI PacketSocketRecvComplete
00334 ( PDEVICE_OBJECT DeviceObject,
00335   PIRP Irp,
00336   PVOID Context );
00337 
00338 NTSTATUS NTAPI
00339 AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00340                PIO_STACK_LOCATION IrpSp, BOOLEAN Short);
00341 NTSTATUS NTAPI
00342 AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00343             PIO_STACK_LOCATION IrpSp );
00344 
00345 /* select.c */
00346 
00347 NTSTATUS NTAPI
00348 AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00349        PIO_STACK_LOCATION IrpSp );
00350 NTSTATUS NTAPI
00351 AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00352         PIO_STACK_LOCATION IrpSp );
00353 NTSTATUS NTAPI
00354 AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp,
00355            PIO_STACK_LOCATION IrpSp );
00356 VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceObject, PFILE_OBJECT FileObject );
00357 VOID KillSelectsForFCB( PAFD_DEVICE_EXTENSION DeviceExt,
00358                         PFILE_OBJECT FileObject, BOOLEAN ExclusiveOnly );
00359 VOID ZeroEvents( PAFD_HANDLE HandleArray,
00360          UINT HandleCount );
00361 VOID SignalSocket(
00362    PAFD_ACTIVE_POLL Poll OPTIONAL, PIRP _Irp OPTIONAL,
00363    PAFD_POLL_INFO PollReq, NTSTATUS Status);
00364 
00365 /* tdi.c */
00366 
00367 NTSTATUS TdiOpenAddressFile(
00368     PUNICODE_STRING DeviceName,
00369     PTRANSPORT_ADDRESS Name,
00370     PHANDLE AddressHandle,
00371     PFILE_OBJECT *AddressObject);
00372 
00373 NTSTATUS TdiAssociateAddressFile(
00374   HANDLE AddressHandle,
00375   PFILE_OBJECT ConnectionObject);
00376 
00377 NTSTATUS TdiDisassociateAddressFile(
00378   PFILE_OBJECT ConnectionObject);
00379 
00380 NTSTATUS TdiListen
00381 ( PIRP *Irp,
00382   PFILE_OBJECT ConnectionObject,
00383   PTDI_CONNECTION_INFORMATION *RequestConnectionInfo,
00384   PTDI_CONNECTION_INFORMATION *ReturnConnectionInfo,
00385   PIO_STATUS_BLOCK Iosb,
00386   PIO_COMPLETION_ROUTINE  CompletionRoutine,
00387   PVOID CompletionContext);
00388 
00389 NTSTATUS TdiReceive
00390 ( PIRP *Irp,
00391   PFILE_OBJECT ConnectionObject,
00392   USHORT Flags,
00393   PCHAR Buffer,
00394   UINT BufferLength,
00395   PIO_STATUS_BLOCK Iosb,
00396   PIO_COMPLETION_ROUTINE  CompletionRoutine,
00397   PVOID CompletionContext);
00398 
00399 NTSTATUS TdiSend
00400 ( PIRP *Irp,
00401   PFILE_OBJECT ConnectionObject,
00402   USHORT Flags,
00403   PCHAR Buffer,
00404   UINT BufferLength,
00405   PIO_STATUS_BLOCK Iosb,
00406   PIO_COMPLETION_ROUTINE  CompletionRoutine,
00407   PVOID CompletionContext);
00408 
00409 NTSTATUS TdiReceiveDatagram(
00410     PIRP *Irp,
00411     PFILE_OBJECT TransportObject,
00412     USHORT Flags,
00413     PCHAR Buffer,
00414     UINT BufferLength,
00415     PTDI_CONNECTION_INFORMATION From,
00416     PIO_STATUS_BLOCK Iosb,
00417     PIO_COMPLETION_ROUTINE CompletionRoutine,
00418     PVOID CompletionContext);
00419 
00420 NTSTATUS TdiSendDatagram(
00421     PIRP *Irp,
00422     PFILE_OBJECT TransportObject,
00423     PCHAR Buffer,
00424     UINT BufferLength,
00425     PTDI_CONNECTION_INFORMATION To,
00426     PIO_STATUS_BLOCK Iosb,
00427     PIO_COMPLETION_ROUTINE CompletionRoutine,
00428     PVOID CompletionContext);
00429 
00430 NTSTATUS TdiQueryMaxDatagramLength(
00431         PFILE_OBJECT FileObject,
00432         PUINT MaxDatagramLength);
00433 
00434 /* write.c */
00435 
00436 NTSTATUS NTAPI
00437 AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00438                 PIO_STACK_LOCATION IrpSp, BOOLEAN Short);
00439 NTSTATUS NTAPI
00440 AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
00441              PIO_STACK_LOCATION IrpSp);
00442 
00443 #endif/*_AFD_H*/

Generated on Sat May 26 2012 04:26:36 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.